网易雷火笔试 网易雷火笔试题 0911

笔试时间:2024年09月11日 秋招

历史笔试传送门:2023秋招笔试合集

第一题

题目

游戏玩法相关的数值数据一股来说会披放在一个叫配置表的地方。配置表样表如下:1 today 2 is 3 good 4 day。约定:第一列为主键列(id列,唯一,从上到下保持升序)第二列为值列,所谓的差异比对就是比对的新旧两张表相同id行的值游戏的每一个版本更新,策划都会对配置表中的数据进行修改以通应游戏玩法的变化,为了避免乘划因人为失误导致配置表错误修改,需要对配置表每次变更内容都做审核,基于这个场景,请设计一个新旧配置表差异比对的程序,将左表(旧表)和右表(新表)进行差异比对,返回两张表的新增修改/删除行的信息。这个程序包含了4个入参,分别对应左表(旧日表)和右表(新表)的主键列和值列,第1个参数是左表的主健列表,第2个参数是左表的值列表,第3个参数是右表的主健列表,第4个参数是右表的值列表。出参是个双层的列表,内部包含了3个列表,第1个列表是新增行id列表,第2个列表是修改行id列表,第3个列表是删除行id列表,这3个列表均按id开序排例列。

样例输入

[1,2],["nowcoder","best"],[1,2],["nowcoder","great"]

样例输出

[[],[2],[]]

说明:在这个样例中,无数据新增,所以返回值第一个列表为空,id=2的数据行被修改了,所以返回值第二个列表是[2],无数据删除,所以返回值第三个列表为空。

参考题解

使用两个哈希表分别存储左表和右表的主键和值的对应关系,方便快速查找和比较。遍历新表的主键列,找出新增和修改的行。遍历旧表的主键列,找出删除的行。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

vector<vector<long>> compareConfigs(vector<long> oldIds, vector<string> oldValues, vector<long> newIds, vector<string> newValues) {
    // 存储旧表和新表的数据
    map<long, string> oldTable;
    map<long, string> newTable;
    vector<long> addedRows;
    vector<long> modifiedRows;
    vector<long> deletedRows;

    for (int i = 0; i < oldIds.size(); i++) {
        oldTable[oldIds[i]] = oldValues[i];
    }

    for (int i = 0; i < newIds.size(); i++) {
        newTable[newIds[i]] = newValues[i];
    }

    for (auto id : newIds) {
        if (oldTable.find(id) == oldTable.end()) {
            addedRows.push_back(id);
        } else if (newTable[id] != oldTable[id]) {
            modifiedRows.push_back(id);
        }
    }

    for (auto id : oldIds) {
        if (newTable.find(id) == newTable.end()) {
            deletedRows.push_back(id);
        }
    }

    sort(addedRows.begin(), addedRows.end());
    sort(modifiedRows.begin(), modifiedRows.end());
    sort(deletedRows.begin(), deletedRows.end());

    vector<vector<long>> result = {addedRows, modifiedRows, deletedRows};
    return result;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.*;

public static ArrayList<ArrayList<Long>> compareConfigs(ArrayList<Long> oldIds, ArrayList<String> oldValues,ArrayList<Long> newIds, ArrayList<String> newValues) {
 // 存储旧表和新表的数据
        Map<Long, String> oldTable = new HashMap<>();
        Map<Long, String> newTable = new HashMap<>();
        ArrayList<Long> addedRows = new ArrayList<>();
        ArrayList<Long> modifiedRows = new ArrayList<>();
        ArrayList<Long> deletedRows = new ArrayList<>();

        for (int i = 0; i < oldIds.size(); i++) {
            oldTable.put(oldIds.get(i), oldValues.get(i));
        }

        for (int i = 0; i < newIds.size(); i++) {
            newTable.put(newIds.get(i), newValues.get(i));
        }

        for (int id : newIds) {
            if (!oldTable.containsKey(id)) {
                addedRows.add(id);
            } else if (!newTable.get(id).equals(oldTable.get(id))) {
                modifiedRows.add(id);
            }
        }

        for (int id : oldIds) {
            if (!newTable.containsKey(id)) {
                deletedRows.add(id);
            }
        }

        Collections.sort(addedRows);
        Collections.sort(modifiedRows);
        Collections.sort(deletedRows);

        ArrayList<ArrayList<Integer>> result = new ArrayList<>();
        result.add(addedRows);
        result.add(modifiedRows);
        result.add(deletedRows);

        return result;
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

def compare_configs(old_ids, old_values, new_ids, new_values):
    # 存储旧表和新表的数据
    old_table = dict(zip(old_ids, old_values))
    new_table = dict(zip(new_ids, new_values))
    added_rows = []
    modified_rows = []
    deleted_rows = []

    for id in new_ids:
        if i

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

一面:自我介绍面试分为Unity相关知识:1.对Unity了解多少?2.Unity开发有多久的经验?3.Unity的生命周期,及每个部分的作用4.如何控制脚本的执行顺序?5.为什么物理效果放到FixedUpdate里面去运行?6.动画状态机中有哪些组件,以及如何使用7.如何去实现分层的动画效果?8.遮罩有哪些属性?9.用动画机实现八方向的移动10.物理碰撞有哪些接口11.rigedBody需要怎么挂才能生效?C#相关:1.GC的简要原理以及如何使用?2.怎么防止过渡的GC产生?3.怎么去设计一个对象池?(用具体的程序逻辑、数据结构、对外提供哪些接口)项目经历:1.在3D空间下怎么描述点A到点B做的矩阵变换2.点积和叉乘的几何意义3.摄像机的右前方有个敌人,怎么用点积和叉乘去计算敌人和摄像机的垂直距离4.角色移动的移动方程怎么写?5.Unity有多少种方式去实现角色移动?6.不使用方法,手动实现角色的移动(口述公式)7.加载配置文件的流程(数据持久化)数据结构:1.链表和数组的应用与区别2.双向链表与循环链表的原理1.指针与指针数组的应用与区别游戏经历:1.平时学习与如何去驱动自己的进步2.平时有去破解游戏查看源码吗?3.有去复刻游戏的玩法吗(举个例子)无二面北京水泠喵主问项目和技术没问八股会shader,lua的可以投一下【内推链接】【内推码】NTA7ULy(内推简历优先筛选)「关于真有趣」https://join.xmfunny.com/真有趣(So&nbsp;Funny)成立于&nbsp;2012&nbsp;年,秉承着&nbsp;“创作长期有效的快乐,赢得百万人热爱”&nbsp;的愿景驱动,致力于为全球用户提供健康有趣的游戏体验。目前,已推出《香肠派对》、《不休的乌拉拉》、《仙侠道》等&nbsp;9&nbsp;款游戏,累计服务超&nbsp;2&nbsp;亿用户。「在这里,你的日常体验是」◇&nbsp;&nbsp;1&nbsp;对&nbsp;1&nbsp;导师,伴你丝滑融入职场生活◇&nbsp;&nbsp;培训、沙龙、技术月刊等多种成长补给,助你快速成长◇&nbsp;&nbsp;简单纯粹的工作氛围,贴心的福利关怀,让你健康快乐米哈游地工作与生活「校招岗位」初级Unity3D工程师、Unity3D工程师(不休的乌拉拉)、服务端工程师、系统策划(不休的乌拉拉)、游戏设计师(萌宠肉鸽)、玩法策划(夺金射击)、技术美术(动画向)、原画设计师、场景原画设计师、AIGC设计师、初级数据分析师(香肠派对)「如何加入真有趣」◇&nbsp;&nbsp;招聘对象:2025&nbsp;届毕业生◇&nbsp;&nbsp;工作地点:厦门【内推链接】https://join.xmfunny.com/【内推码】NTA7ULy(内推简历优先筛选)投递的uu留下姓名和岗位~
真有趣游戏
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
3 12 评论
分享
牛客网
牛客企业服务