米哈游 笔试 09.14 AC

一晚上做了三场笔试,时间大概
  • 18:30 - 19:15 小米
  • 19:15 - 19:45 茄子科技
  • 19:45 - 20:30 米哈游。
还好前两场简单,得以做米哈游。

要不是秋招没有 offer,谁会这样啊


第一题     包含 k 个 "mihoyo" 的字串的最短长度 (start end)


    public static void main1(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        String s = sc.next();
        String tmp = "mihoyo";
        List<Integer> l = new ArrayList<>();
        // 先尝试获取 mihoyo 的位置,这里用list存储m的索引
        for(int i = 0; i < n - 5; i++){
            boolean ok = true;
            for(int j = 0; j < 6; j++){
                if(s.charAt(i+j) != tmp.charAt(j)){
                    ok = false;
                }
            }
            if(ok){
                l.add(i);
                i += 5;
            }
        }
        // 不够 k 个
        if(l.size() < k){
            System.out.println(-1);
            return;
        }
        // 判断比较
        int retIdx = 0;
        int len = l.get(k-1) - l.get(0);
        for(int i = k; i < l.size(); i++){
            int tmplen = l.get(i) - l.get(i-k+1);
            if(tmplen <= len){
                retIdx = i-k+1;
                len = tmplen;
            }
        }
        System.out.println(l.get(retIdx)+" "+(l.get(retIdx+k-1)+5));
    }


第二题 如下


一个人内心有个正整数 X,有 n 个人过来猜,这个人会对猜的结果进行统计,

有 a 个人的结果 >= X,有 b 个人的结果 < X

问这个数 X 有多少种可能的解决方法,如果无穷,输出 "infinity"

补充,第二题的返回在于题目说 X 是正整数
    public static void main2(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int arr[] = new int[n];
        for(int i = 0; i < n; i++) arr[i] = sc.nextInt();
        int a = sc.nextInt(), b = sc.nextInt();
        Arrays.sort(arr);
        if(b == 0){ // 全部是小于等于的
            System.out.println(arr[0]);
            return;
        }
        if(a == 0) { // 全部是大于的
            System.out.println("infinity");
            return;
        }
        int left = arr[b-1], right = arr[b];
        if(left == right){ // left < x <= right 不成立
            System.out.println(-1);
            return;
        }else{
            System.out.println(right-left);
        }

    }


第三题 树的题


有一棵树(没说是不是二叉树)有 N 个节点。如果相邻两个节点同奇数或同偶数,则认为是同一个连通分量,否则不同的连通分量。
根据此条件,可以获得每个子树的连通分量个数。打印所有子树连通分量个数的和。
3
/    \
4     1
/      \
2         5

例如,3-1-5是同一个连通分量,其余各自是一个连通分量。

1、2、3、4、5子树连通分量个数分别为 2、1、3、1、1,总和为 8
    static Map<Integer, Integer> map;
    static long ret;
    static List<List<Integer>> l;
    static boolean vis[];
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int root = sc.nextInt();

        vis = new boolean[n+1];
        map = new HashMap<>();
        ret = 0;

        l = new ArrayList<>();
        for(int i = 0; i <= n; i++){
            l.add(new ArrayList<>());
        }
        for(int i = 0; i < n-1; i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            l.get(a).add(b);
            l.get(b).add(a);
        }

        dfs(root);
        System.out.println(ret);
    }

    public static int dfs(int pos) {
        List<Integer> childs = l.get(pos);
        vis[pos] = true;
        // 当前节点是一个连通分量
        int tmp = 1;
        for(int child: childs){
            if(!vis[child]){
                // 获取 child 的连通分量
                tmp += dfs(child);
                // 如果同奇偶,则连通分量个数-1
                if(child % 2 == pos%2) {
                    tmp -=1;
                }
            }
        }
        ret += tmp;
        return tmp;
    }


#米哈游##米哈游笔试##校招##23届秋招笔面经#
全部评论
能解释一下第二题题目和给的代码吗
4 回复 分享
发布于 2022-09-14 20:36 安徽
第三题卡92% 不知道是啥样例
3 回复 分享
发布于 2022-09-14 21:03 辽宁
猛啊。10点结束,你9点发题解
2 回复 分享
发布于 2022-09-14 21:24 河北
大佬,能瞧瞧第三题代码嘛
1 回复 分享
发布于 2022-09-14 22:11 丹麦
woc,忘了考虑多叉树了,我debug了好久
1 回复 分享
发布于 2022-09-14 22:03 上海
还有人在笔试,hxd
1 回复 分享
发布于 2022-09-14 21:19 江苏
大佬最后拿的哪的offer
点赞 回复 分享
发布于 2023-03-02 19:46 美国
兄弟,*******从此秋招不迷路
点赞 回复 分享
发布于 2022-09-16 13:10 澳大利亚
一样,七点到8点深信服,8点到酒店mhy😂😂
点赞 回复 分享
发布于 2022-09-15 15:43 山东
原来不一定是二叉树!我看了半天最后也没想到是这儿出了问题,只能说吃一堑长一智了,下次看到树的题都得好好看题
点赞 回复 分享
发布于 2022-09-15 01:45 美国
第2题 同样是排序 3道自测都过了 为什么提交是0% #include<bits/stdc++.h> using namespace std; int main(){     vector<int> nums{1};     int n, x, y;     cin >> n;     int tmp;     for(int i = 0; i < n; i++){         cin >> tmp;         nums.push_back(tmp);     }     sort(nums.begin(), nums.end());     cin >> x >> y;     int l = nums[x], r = nums[x + 1];     if(x == 0){         cout << "infinity" << endl;     }     else{          cout << r - l << endl;     } }
点赞 回复 分享
发布于 2022-09-14 23:31 广东
看了一圈,只有你的第三题代码我看懂了谢谢大佬
点赞 回复 分享
发布于 2022-09-14 23:00 陕西
老哥求解答: tmp += dfs(child); 假如根节点为偶数有一个子节点为奇数,那为什么要加这个子节点的连通分量呢
点赞 回复 分享
发布于 2022-09-14 22:25 山西
第一题和你思路一样,不知道为啥16%,第三题出了表示图的方式,其他都一样,idea里面也可以算8,网页上0%,哎,做的心累啊,最后没时间了。
点赞 回复 分享
发布于 2022-09-14 21:15 山西
第二题范围哪里获得的,不是只传了一个分数列表吗,没见着范围啊
点赞 回复 分享
发布于 2022-09-14 20:40 陕西

相关推荐

07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
投递拓竹科技等公司10个岗位
点赞 评论 收藏
分享
评论
23
74
分享

创作者周榜

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