网易互娱 笔试 没啥意思(附三题答案)

AI 岗,我这么渣渣都一个小时三题全AC了。
第一题 5 分钟A了,第二题 20 多分钟AC(花了点时间在构建二叉树上),第三题 30 分钟左右吧(把边界情况想错了花了点时间)。
唉,网易互娱算法岗应该是不招人了吧,题目出这么简单没啥意思。
#网易互娱#
全部评论
我真不是大佬,也就是个正常刷了点题的小菜鸡; 对不住各位了,笔试过程中问我的,我都没怎么回复,抱歉了。。。 已经把我的思路发出来了,不知道还有没有更好的思路,各位大佬可以提醒我一下; 代码写的比较粗糙,各位看看思路就好,有哪里可以优化的也可以指出来,大家一起学习。  
点赞 回复 分享
发布于 2019-09-07 21:39
正卡在第三题上......
点赞 回复 分享
发布于 2019-09-07 20:25
这种题还给150min做。。。开始我还以为会有多难。。。
点赞 回复 分享
发布于 2019-09-07 20:46
第一题(二进制回文串): #coding=utf-8 import sys def func(number):     bin_number = bin(number)[2: ]     if bin_number == bin_number[::-1]:         return "YES"     else:         return "NO" if __name__ == "__main__":     T = int(sys.stdin.readline().strip())     for _ in range(T):         number = int(sys.stdin.readline().strip())         print(func(number))
点赞 回复 分享
发布于 2019-09-07 21:34
第二题(递增二叉树): #coding=utf-8 import sys class Node(object):     def __init__(self, x, left = None, right = None):         self.val = x         self.left = left         self.right = right def func(root):     if not root:         return "NO"     cur_level_sum, cur_level = -1, [root]     while cur_level:         cur_level_val = []         next_level = []         for node in cur_level:             cur_level_val.append(node.val)             if node.left:                 next_level.append(node.left)             if node.right:                 next_level.append(node.right)         if cur_level_sum >= sum(cur_level_val):             return "NO"         cur_level_sum = sum(cur_level_val)         cur_level = next_level     return "YES" if __name__ == "__main__":     T = int(sys.stdin.readline().strip())     for _ in range(T):         N = int(sys.stdin.readline().strip())         id_node_dict = {}         # 构建哈希表 key: 结点编号  value:结点         for i in range(N):             val, left, right = list(map(int, sys.stdin.readline().strip().split()))             id_node_dict[i] = Node(val, left, right)         # 确定根节点:         sub_tree_id = []         for id, node in id_node_dict.items():             if node.left != -1 and node.left not in sub_tree_id:                 sub_tree_id.append(node.left)             if node.right != -1 and node.right not in sub_tree_id:                 sub_tree_id.append(node.right)         root_id = sum(range(N)) - sum(sub_tree_id)         # 构建二叉树:         for id, node in id_node_dict.items():             if node.left == -1:                 node.left = None             else:                 node.left = id_node_dict[node.left]             if node.right == -1:                 node.right = None             else:                 node.right = id_node_dict[node.right]         print(func(id_node_dict[root_id]))
点赞 回复 分享
发布于 2019-09-07 21:35
第三题(最多喝多少天咖啡): #coding=utf-8 import sys def func(k, m, days):     if k == 0:         return 30     if m == 0:         return len(range(1, 31, k + 1))     # 初始化:长度为30的列表,将固定喝咖啡的日子置为1,其他为0     dp = [1 if i + 1 in days else 0 for i in range(30)]     for i in range(30):         if dp[i] == 1:             continue         # 如果第i天前面k天没喝咖啡,同时后面k天也没喝,那第i天就可以喝,置为1         if sum(dp[max(0, i - k) : i]) == 0 and sum(dp[i+1 : i+1+k]) == 0:             dp[i] = 1     return sum(dp) if __name__ == "__main__":     T = int(sys.stdin.readline().strip())     for _ in range(T):         k, m = list(map(int, sys.stdin.readline().strip().split()))         days = list(map(int, sys.stdin.readline().strip().split()))         print(func(k, m, days))
点赞 回复 分享
发布于 2019-09-07 21:36
大佬,求助呀
点赞 回复 分享
发布于 2019-09-07 20:21
构建二叉树为什么第一个节点左右节点都是-1,
点赞 回复 分享
发布于 2019-09-07 20:28
求第二题答案
点赞 回复 分享
发布于 2019-09-07 20:28
二叉树 求指点
点赞 回复 分享
发布于 2019-09-07 20:29
???为什么我有4个题,不同岗位题目数量不一样吗
点赞 回复 分享
发布于 2019-09-07 20:30
最后一题那个十字咋做啊?
点赞 回复 分享
发布于 2019-09-07 20:47
根节点应该怎么找呢
点赞 回复 分享
发布于 2019-09-07 20:51
谁能放一题第三题的答案吗?菜鸡我太难了
点赞 回复 分享
发布于 2019-09-07 20:59
有大佬指点么?
点赞 回复 分享
发布于 2019-09-07 21:00
nb,笔试通知都没有收到,你们都答完了
点赞 回复 分享
发布于 2019-09-07 21:04
这是指   每一个节点 大于下一层所有节点之和么?
点赞 回复 分享
发布于 2019-09-07 21:10
游戏研发题也一样
点赞 回复 分享
发布于 2019-09-07 21:59
public class TreeNode { //树节点的结构 int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; left = null; right = null; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int T = in.nextInt(); for (int i = 0; i < T; i++) { int N = in.nextInt(); //先把每个节点存在数组tree中 TreeNode[] tree = new TreeNode[N]; int[] val = new int[N]; int[] left = new int[N]; int[] right = new int[N]; int[] root = new int[N]; for (int j = 0; j < N; j++) { val[j] = in.nextInt(); tree[j] = new TreeNode(val[j]); left[j] = in.nextInt(); right[j] = in.nextInt(); } //添加节点的左右子节点,同时记录哪些点是有父节点的,有父节点的把root数组的相应位置标记为1 for (int j = 0; j < N; j++) { if (left[j] != -1) { tree[j].left = tree[left[j]]; root[left[j]] = 1; } if (right[j] != -1) { tree[j].right = tree[right[j]]; root[right[j]] = 1; } } //广度优先搜索 Queue<TreeNode> q = new LinkedList<TreeNode>(); //根节点一定不是任何节点的左右子节点,所以root数组中为0的那个节点就是根结点 for (int j = 0; j < N; j++) { if (root[j] == 0) { q.add(tree[j]); break; } } //presum记录上一层的和,sum记录下一层的和 int presum = -1; boolean flag = true; while (!q.isEmpty()) { int size = q.size();//size记录当前层有多少个节点 int index = 0;//index记录当前层有多少个节点已经搜索过了 int sum = 0;//记录当前层节点的权值之和 while (index < size) { TreeNode tmp = q.poll(); sum += tmp.val; index++; if (tmp.left != null) q.add(tmp.left); if (tmp.right != null) q.add(tmp.right); } if (presum == -1) { presum = sum;//第一层时presum为-1,令他等于当前层的结果 } else if (presum > sum) {//不为第一层时比较当前层和上一层的和是否满足递增,不满足则退出循环输出NO flag = false; break; } } if (flag) System.out.println("YES"); else System.out.println("NO"); } } } 不知道到底哪不对 一直是0
点赞 回复 分享
发布于 2019-09-07 22:04
第三题怎么一直数据越界。。。
点赞 回复 分享
发布于 2019-09-07 22:08

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
评论
1
7
分享
牛客网
牛客企业服务