米哈游 笔试 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 河北
还有人在笔试,hxd
1 回复 分享
发布于 2022-09-14 21:19 江苏
woc,忘了考虑多叉树了,我debug了好久
1 回复 分享
发布于 2022-09-14 22:03 上海
大佬,能瞧瞧第三题代码嘛
1 回复 分享
发布于 2022-09-14 22:11 丹麦
第二题范围哪里获得的,不是只传了一个分数列表吗,没见着范围啊
点赞 回复 分享
发布于 2022-09-14 20:40 陕西
第一题和你思路一样,不知道为啥16%,第三题出了表示图的方式,其他都一样,idea里面也可以算8,网页上0%,哎,做的心累啊,最后没时间了。
点赞 回复 分享
发布于 2022-09-14 21:15 山西
老哥求解答: tmp += dfs(child); 假如根节点为偶数有一个子节点为奇数,那为什么要加这个子节点的连通分量呢
点赞 回复 分享
发布于 2022-09-14 22:25 山西
看了一圈,只有你的第三题代码我看懂了谢谢大佬
点赞 回复 分享
发布于 2022-09-14 23:00 陕西
第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-15 01:45 美国
一样,七点到8点深信服,8点到酒店mhy😂😂
点赞 回复 分享
发布于 2022-09-15 15:43 山东
兄弟,*******从此秋招不迷路
点赞 回复 分享
发布于 2022-09-16 13:10 澳大利亚
大佬最后拿的哪的offer
点赞 回复 分享
发布于 2023-03-02 19:46 美国

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
评论
23
74
分享
牛客网
牛客企业服务