8.10Zoom笔试

1.有一颗有根树 根节点为1号节点 每个节点为红色或蓝色 假设第i个节点的权值为从根节点到该节点红蓝节点的数量之差 请你返回所有节点的权值之和
输入
第一行输入n个节点 第二行为每个节点的颜色 接下来n-1行为a b节点之间有一条线
5
RBBRB
1 5
2 5
1 3
5 4
输出
3

//没有全部通过 不知原因 希望大家指出
public class Test01 {
    static int res = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = Integer.parseInt(sc.nextLine());
        char[] ch = sc.nextLine().toCharArray();
        Map<Integer, List<Integer>> tree = new HashMap<>();
        for (int i = 0; i < num - 1; i++) {
            int[] n = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            tree.computeIfAbsent(n[0], k -> new ArrayList<>()).add(n[1]);
            tree.computeIfAbsent(n[1], k -> new ArrayList<>()).add(n[0]);
        }
        int blue = 0;
        int red = 0;
        boolean[] visited = new boolean[num + 1];
        visited[0] = true;
        dfs(1, blue, red, visited, ch, tree);
        System.out.println(res);
    }

    public static void dfs(int cur, int blue, int red, boolean[] visited, char[] ch, Map<Integer, List<Integer>> tree) {
        if(visited[cur]) return;
        if (ch[cur - 1] == 'B') {
            res = res +Math.abs(red - blue-1);
        } else {
            res = res+ Math.abs(red+1  - blue);
        }
        visited[cur] = true;
        for (int i : tree.get(cur)) {
            if (ch[cur - 1] == 'B') {
                dfs(i, blue + 1, red, visited, ch, tree);
            } else {
                dfs(i,  blue, red + 1, visited, ch, tree);
            }
        }
    }
}

完成股票推荐系统设计,如果一个人关注了a又关注了b 则系统会给只关注a没关注b的人推荐关注b,请返回应该给此人推荐关注几个股票
输入
第一行输入q表示操作次数
接下来输入一次操作
共有两种操作
1.注册
格式为
1 name n 表示有一个name的人关注了n个股票
第二行输入n个字符串表示这n个股票 n个字符串不相同
2.查询
格式为
输入2 name 表示查询系统会给此人推荐多少股票
保证至少有一次查询

5
1 Alice 2
Zoom Apple
2 Bob
2 Alice
1 Bob 2
Apple MicroSoft
2 Bob
输入
error
0
1

public class Test02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int q = sc.nextInt();
        UF uf = new UF(500010);
        Map<String, Integer> map1 = new HashMap<>(); // 每个名字在树的映射
        Map<String, Integer> map2 = new HashMap<>(); // 股票和 index 映射
        Map<String, Integer> map3 = new HashMap<>();
        int index = 0;
        for (int i = 0; i < q; i++) {
            int op = sc.nextInt();
            if (op == 1) {
                String name = sc.next();
                int n = sc.nextInt();
                map3.put(name, n);
                String stock = sc.next();
                int currIndex = -1;
                if (map2.containsKey(stock)) {
                    currIndex = map2.get(stock);
                } else {
                    currIndex = index++;
                }
                map1.put(name, currIndex);
                map2.put(stock, currIndex);
                for (int j = 1; j < n; j++) {
                    int t = -1;
                    stock = sc.next();
                    if (map2.containsKey(stock)) {
                        t = map2.get(stock);
                    } else {
                        t = index++;
                    }
                    map2.put(stock, t);
                    uf.union(currIndex, t);
                    currIndex = t;
                }
            } else {
                String name = sc.next();
                if (!map3.containsKey(name)) {
                    System.out.println("error");
                    continue;
                }
                int root = uf.find(map1.get(name));
                int diff = uf.size[root] - map3.get(name);
                System.out.println(diff);
            }
        }
    }


    static class UF {
        int[] parent;
        int[] rank;
        int[] size;

        UF(int n) {
            parent = new int[n];
            rank = new int[n];
            size = new int[n];
            for (int i = 0; i < n; i++) {
                parent[i] = i;
                size[i] = 1;
            }
        }

        int find(int x) {
            while (parent[x] != x) {
                x = parent[x];
            }
            return x;
        }

        void union(int x, int y) {
            int rootX = find(x);
            int rootY = find(y);
            if (rootX != rootY) {
                if (rank[rootX] >= rank[rootY]) {
                    if (rank[rootX] == rank[rootY]) {
                        rank[rootX]++;
                    }
                    parent[rootY] = rootX;
                    size[rootX] += size[rootY];
                } else {
                    parent[rootX] = rootY;
                    size[rootY] += size[rootX];
                }
            }
        }

    }
}
#ZOOM笔试##做完zoom2023秋招笔试,人麻了#
全部评论
第一题用long long
2 回复 分享
发布于 2022-08-10 21:24
第一题有一个例子n是0,我判了0才过的
点赞 回复 分享
发布于 2022-08-10 22:19
就a了第一题😓
点赞 回复 分享
发布于 2022-08-10 21:24
这并查集我时间够也写不出来。。。
点赞 回复 分享
发布于 2022-08-11 00:03
第一题过了93.33,忘记用long long了
点赞 回复 分享
发布于 2022-08-11 19:58
你过了多少 46吗
点赞 回复 分享
发布于 2022-08-10 23:58

相关推荐

想干测开的tomca...:让我来压力你!!!: 这份简历看着“技术词堆得满”,实则是“虚胖没干货”,槽点一抓一大把: 1. **项目描述是“技术名词报菜名”,没半分自己的实际价值** 不管是IntelliDoc还是人人探店,全是堆Redis、Elasticsearch、RAG这些时髦词,但你到底干了啥?“基于Redis Bitmap管理分片”是你写了核心逻辑还是只调用了API?“QPS提升至1500”是你独立压测优化的,还是团队成果你蹭着写?全程没“我负责XX模块”“解决了XX具体问题”,纯把技术文档里的术语扒下来凑字数,看着像“知道名词但没实际动手”的实习生抄的。 2. **短项目塞满超纲技术点,可信度直接***** IntelliDoc就干了5个月,又是RAG又是大模型流式响应又是RBAC权限,这堆活儿正经团队分工干都得小半年,你一个后端开发5个月能吃透这么多?明显是把能想到的技术全往里面塞,生怕别人知道你实际只做了个文件上传——这种“技术堆砌式造假”,面试官一眼就能看出水分。 3. **技能栏是“模糊词混子集合”,没半点硬核度** “熟悉HashMap底层”“了解JVM内存模型”——“熟悉”是能手写扩容逻辑?“了解”是能排查GC问题?全是模棱两可的词,既没对应项目里的实践,也没体现深度,等于白写;项目里用了Elasticsearch的KNN检索,技能栏里提都没提具体掌握程度,明显是“用过但不懂”的硬凑。 4. **教育背景和自我评价全是“无效信息垃圾”** GPA前10%这么好的牌,只列“Java程序设计”这种基础课,分布式、微服务这些后端核心课提都不提,白瞎了专业优势;自我评价那堆“积极认真、细心负责”,是从招聘网站抄的模板吧?没有任何和项目挂钩的具体事例,比如“解决过XX bug”“优化过XX性能”,纯废话,看完等于没看。 总结:这简历是“技术名词缝合怪+自我感动式凑数”,看着像“背了后端技术栈名词的应届生”,实则没干货、没重点、没可信度——面试官扫30秒就会丢一边,因为连“你能干嘛”都没说清楚。
点赞 评论 收藏
分享
11-03 13:18
门头沟学院 Java
包行:平时怎么刷算法题的哇,字节的手撕听说都很难
字节跳动工作体验
点赞 评论 收藏
分享
评论
12
48
分享

创作者周榜

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