网易笔试9.12 Java后端岗

四道编程,两道问答,问答不难,阻塞队列;sleep和wait区别,都是经典面试题。
AC了两道,第三第四都没怎么来得及思考。太菜。附一下自己的Java代码,我感觉都是偏暴力的解法:

第一题 找樱桃节点
输入用例:第一行节点数+连接点的枝干数量
10 9
1 left 2
1 right 3
2 left 4
2 right 5
3 right 6
6 left 7
6 right 8
7 left 9
7 right 10
由于这个输入用例很奇怪,之前在leetcode没遇到过,所以卡了很久。后来用了一个二维数组(m+1)*2来保存节点的左右节点信息,因为根节点是1,所以我直接把0行给去了,之后读好读。
两个hashset分别存有子节点的父节点和叶子结点。
最后条件判断筛选父节点就好了。
public class Main {
    public static void main(String[] args) {
        int res =0;
        Scanner sc = new Scanner(System.in);
        int m = sc.nextInt();
        int n = sc.nextInt();
        //存左右节点信息
        int[][] dict = new int[m+1][2];
        String nullS = sc.nextLine();
        HashSet<Integer> roots = new HashSet<>();
        for(int i  =0;i<n;i++){
            String s = sc.nextLine();
            String[] strs = s.split(" ");
            roots.add(Integer.parseInt(strs[0]));
            if(strs[1].equals("left")){
                dict[Integer.parseInt(strs[0])][0] = Integer.parseInt(strs[2]);
            }
            if(strs[1].equals("right")){
                dict[Integer.parseInt(strs[0])][1] = Integer.parseInt(strs[2]);
            }
        }
        HashSet<Integer> leaf = new HashSet<>();
        for(int i = 1;i<=m;i++){
            for(int j =0;j<2;j++){
                if(dict[i][j] != 0 && !roots.contains(dict[i][j])){
                    leaf.add(dict[i][j]);
                }
            }
        }
        for(int i = 1;i<=m;i++){
            if(roots.contains(i) && leaf.contains(dict[i][0] )&& leaf.contains(dict[i][1])){
                res++;
            }
        }
        System.out.println(res);
    }
}
第二题
最长子序列,条件是a,b,c,x,y,z出现了偶数次(包括0)
public static void main(String[] args) {
        Scanner sc  = new Scanner(System.in);
        String s = sc.nextLine();
        char[] chars = s.toCharArray();
        int len = s.length();
        boolean[][] dict = new boolean[len][len];
        int maxLen = 0;
        for(int i = 0; i<len; i++){
            int a = 0, b =0, c =0,x =0,y=0,z=0;
            int temp = i;
            for(int j = i;j<len;j++) {
                if (chars[j] == 'a') {
                    a++;
                }
                if (chars[j] == 'b') {
                    b++;
                }
                if (chars[j] == 'c') {
                    c++;
                }
                if (chars[j] == 'x') {
                    x++;
                }
                if (chars[j] == 'y') {
                    y++;
                }
                if (chars[j] == 'z') {
                    z++;
                }
                if (a % 2 == 0 && b % 2 == 0 && c % 2 == 0 && x % 2 == 0 && y % 2 == 0 && z % 2 == 0) {
                    dict[i][j] = true;
                    temp = j;
                }
                if (temp - i > 0) {
                    maxLen = Math.max(temp - i + 1, maxLen);
                }
            }
        }
        System.out.println(maxLen);
}
请大佬点评指正!

#笔试题目##网易#
全部评论
我只做出来了第一道和第三道,我把第三道贴出来吧 思路就是:生成一个最小生成树,找出最深的节点。从根到最深都是花费1,其他的节点都是一步花费2。 #include<bits/stdc++.h> using namespace std; int a[1001] = {0}; int main(){ memset(a, -1, 1000); int n, k; cin >> n >> k; int tmp; for(int i = 0; i < n-1;i++){ cin >> tmp; if(tmp > i+1){ a[tmp] = i+1; }else{ a[i+1] = tmp; } } int b[1001] = {0}; for(int i = n-1; i >= 0 ;i--){ b[a[i]] = b[a[i]] > (b[i]+1) ? b[a[i]] : (b[i]+1); } for(int i = 0; i < n ;i++){ cout << b[i] << " "; } if(k <= b[0]){ cout << b[0] + 1; }else{ cout << (k - b[0])/2 + b[0] + 1; } return 0; }
1 回复 分享
发布于 2020-09-12 18:14
看到了大佬第二题用hash的解法,豁然开朗,真是学到了😁
1 回复 分享
发布于 2020-09-12 17:24

相关推荐

04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
03-27 01:58
已编辑
西北工业大学 Java
在平静中度过当下:如果这个bg也简历挂的话可能他们现在不缺人了吧,我也是这两天投的,阿里和快手投的岗都是简历秒挂
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务