微软笔试代码交流8.13

贴一下题目吧,从别的帖子捞过来的😂😂😂

微软笔试是两点结束吗?那就等会再发吧

上周的笔试写完第一题后就点了submit,然后就结束了,哭死😂😂😂。希望这次能过吧,贴一下代码,供大家参考
第二题的时间复杂度不知道顶不顶得住,其他两题感觉应该还ok
图片说明

    // 第一题:将A中的某个数字减少一半,最少需要多少次后,数组的和小于等于原来数组和的一半
    // 思路:贪心,大根堆
    public int solution(int[] A) {
        // write your code in Java 8 (Java SE 8)
        PriorityQueue<Double> heap = new PriorityQueue<>((a, b) -> {
            if (a.equals(b)) return 0;
            else return a > b ? -1 : 1;
        });
        int sum = 0;
        for (int n : A) {
            sum += n;
            heap.offer((double) n);
        }
        int res = 0;
        double reduce = 0;
        while (reduce * 2 < sum) {
            double cur = heap.poll();
            cur /= 2;
            reduce += cur;
            heap.offer(cur);
            res++;
        }
        return res;
    }

图片说明

    // 第二题,x[i]/y[i] + x[j]/y[i] = 1的pair数,对1e9+7取模
    // 思路:双指针,两数之和
    public int solution(int[] X, int[] Y) {
        // write your code in Java 8 (Java SE 8)
        int mod = (int) (1e9 + 7);
        int n = X.length;
        double[] fractions = new double[n];
        for (int i = 0; i < n; i++) {
            fractions[i] = ((double) X[i]) / Y[i];
        }
        Arrays.sort(fractions);
        long res = 0;
        for (int i = 0, j = n - 1; i < j; ) {
            double sum = fractions[i] + fractions[j];
            if (sum == 1) {
                int left = 1, right = 1;
                while (i + 1 < n && fractions[i] == fractions[i + 1]) {
                    i++;
                    left++;
                }
                while (j - 1 >= 0 && fractions[j] == fractions[j - 1]) {
                    j--;
                    right++;
                }

                if (i < j) {
                    res = (res + left * right % mod) % mod;
                } else {
                    res = (res + (left - 1) * left / 2 % mod) % mod;
                }
                i++;
                j--;
            } else if (sum > 1) {
                j--;
            } else {
                i++;
            }
        }
        return (int) res;
    }

感谢评论区大佬的思路,更新下第二题map做法

    // 第二题,x[i]/y[i] + x[j]/y[i] = 1的pair数,对1e9+7取模
    // 思路:map
    public int solution(int[] X, int[] Y) {
        // write your code in Java 8 (Java SE 8)
        int mod = (int) (1e9 + 7);
        int n = X.length;
        long res = 0;
        Map<Integer, Map<Integer, Integer>> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int gcg = gcd(X[i], Y[i]);
            int up = X[i] / gcg;
            int down = Y[i] / gcg;
            Map<Integer, Integer> curMap = map.computeIfAbsent(down, k -> new HashMap<>());
            res = (res + curMap.getOrDefault(down - up, 0)) % mod;
            curMap.put(up, curMap.getOrDefault(up, 0) + 1);
        }
        return (int) res;
    }

    public int gcd(int a, int b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }

图片说明

    // 第三题,数组A中每间隔Y-1个的连续X个数的最小和
    // 思路:滑动窗口
    public int solution(int[] A, int X, int Y) {
        // write your code in Java 8 (Java SE 8)
        int n = A.length;
        int res = Integer.MAX_VALUE;
        for (int i = 0; i < Y; i++) {
            int left = i, right = i;
            int sum = 0;
            int count = 0;
            while (right < n) {
                sum += A[right];
                right += Y;
                count++;
                while (count == X) {
                    res = Math.min(res, sum);
                    sum -= A[left];
                    left += Y;
                    count--;
                }
            }
        }
        return res;
    }
#微软笔试#
全部评论
第二题只要用排序复杂度就高了啊😂
点赞 回复 分享
发布于 2022-08-13 14:53
牛啊,我是一个都不会。。
点赞 回复 分享
发布于 2022-08-13 14:50
第三题我还以为x是不连续的,用了动态规划😨,难顶
点赞 回复 分享
发布于 2022-08-13 14:30
第二题也有点问题吧,精度1/3+2/3不等于1吧我用的最小公约数
点赞 回复 分享
发布于 2022-08-13 15:19
我好蠢😂第二题没看到是pair,直接dfs硬搜去了
2 回复 分享
发布于 2022-08-13 17:58
求一个题目
1 回复 分享
发布于 2022-08-13 14:36
求问用Python的话,第二题用Python的Fraction库做可以吗 看了一圈感觉都是求最大公约数 没有直接调库的😂
点赞 回复 分享
发布于 2022-08-14 14:25
请问用最大公约数是怎么解的呀? 不应该是用最大公倍数吗?不太理解
点赞 回复 分享
发布于 2022-08-14 00:55
想请教一下,在n[i] ==n[i+1 ]这个循环里的res = (res + (left - 1) * left / 2,这个式子是怎么得到的呢
点赞 回复 分享
发布于 2022-08-13 15:26
不知道第一道题用double会不会出现精度问题
1 回复 分享
发布于 2022-08-13 18:17
第二题我看到除法就给转成了最小公倍数的整数去做,不过一想最后可能lcm越界了😂
1 回复 分享
发布于 2022-08-13 18:10
有没有大佬用c++翻译翻译
点赞 回复 分享
发布于 2022-08-13 17:28
第二题 :x1/y1,x2/y2,直接判断x1*y2 + x2*y1 == y1*y2 就行了吧,int就能做
3 回复 分享
发布于 2022-08-18 15:12 河南
第二题用的回溯咋整
1 回复 分享
发布于 2022-08-18 10:07 江苏
submit之后还可以接着做哦
点赞 回复 分享
发布于 2022-08-24 01:19 香港
楼主我想请教下取模那里,有什么自学的搜索关键词吗😁 都不知道怎么查
点赞 回复 分享
发布于 2022-08-23 18:29 北京
这个不能看最终分数可太难受了,三个题测试用例都过了,就不知道那些corner case 能不能过。😐
点赞 回复 分享
发布于 2022-08-19 18:22 上海
请问微软可以用本地IDE嘛
点赞 回复 分享
发布于 2022-08-17 22:41 北京
话说这个codility进去是不用登陆的对吗?不想牛客网的笔试那样有名字确认?😐
点赞 回复 分享
发布于 2022-08-16 15:41
大佬来试试华勤技术,内推码:NTAKLE0,详情可看帖子https://www.nowcoder.com/discuss/1016547
点赞 回复 分享
发布于 2022-08-16 11:44

相关推荐

2025-12-03 20:41
门头沟学院 Java
高薪高压 vs 低薪wl...
点赞 评论 收藏
分享
2025-12-05 10:10
复旦大学 Java
点赞 评论 收藏
分享
2025-12-09 13:34
已编辑
华南师范大学 前端工程师
学弟学妹在大二大三的时候就会想说要去找一份自己比较满意的实习,那么如何去做呢?先说一下主包的基本情况,bg211本,在大三上学期拿到一家中厂的实习offer,并在秋招拿到携程的正式offer,是一个比较平稳提升一个路线,大家可以作为一个参考首先尽早得明确自己感兴趣的方向,或者说能够愿意在未来深耕的领域,以技术岗为例,主流的方向有前端,后端,测试,运维,游戏,算法,AI,硬件等等,这个需要大家在大一大二的课程学习以及课余自己去体会,当然大家在选择方向的时候,会有各种各样的声音干扰着我们的选择,比如我作为前端开发最经常听到的&quot;前端已死,未来都会被AI取代&quot;,或者像其他的&quot;后端竞争压力大,92硕大佬横飞&quot;,&quot;测试就是点点点&quot;要这么看,哪一条路都完蛋哈哈,所以还是要看自己对哪一方面感兴趣,当然现实的问题也要综合去考量,比如算法岗确实对学历要求比较高。当你决定了未来的方向之后,就要补充自己这块领域的知识储备了,可以问ai这个方向需要学习哪些知识,比如前端就是基础的三件套,到vue/react前端框架,浏览器和网络相关知识,git的基本使用操作等等,也可以看实习岗位的要求,看看公司都要求我们有哪些技能,比如更进阶的前端工程化,跨端等等的内容作为补充。其次准备算法,前端hot100+面试150完全够用,其他的岗位对算法的要求我不太清楚哈,可能后端比前端高一点?找实习也是找工作,所以要准备一份精简的简历,网上也有很多教制作简历的教程和视频,大家可以再看看,总结来说就是有一个基本的个人信息,其中名字和学校最重要,上一段提到的个人技能,以及在校所作的项目。项目我这里着重讲一下,因为给我在实习期间有帮我的mt筛继任实习生简历所以当了一次小小的hr有点心得:技术岗不要放什么三下乡,社团等与技术无关的内容;项目经验和应聘岗位要垂直,我收到一个同学的简历我们招的是前端实习生但他的项目是ai训练相关的;在提到我做了什么之后最好附上我是怎么做的,我这样做提升了什么,而不是一句空话。你需要确保你对简历上面都是对这个岗位有用的信息,面试官关心的是你能不能干活而不是你安排活动有多牛逼你做其他事情有多牛逼,切记!然后就到了投递啦,实习的投递我暂时分为大厂和中小厂,一般大厂的实习都有官方的宣讲和招聘官网通道,大家只需要在对应的投递事件和对应官网按照指示投递就ok啦,剩下就是等待笔试和面试,一般是测评(行测+心测)+笔试+2-4轮技术面+hr面。中小厂一般是在****招聘直接投递,中小厂相比于大厂对算法考察低太多,甚至没有,一般是1-2技术面+hr面。当然大厂也可以在****投,可以与hr实时沟通跟进进度。如果年级有交流群或者有学长学姐发布内推渠道/简历直推,可以大胆询问投递,有可能面试难度会比直接投递要降低一点点哦!面试准备阶段首先需要你阅读/理解/背诵八股,所谓八股就是这个面试这个岗位会问的一些常规问题,实习的面试八股的占比还是比较高的,大家可以在大神做的八股网站和牛客/xhs&nbsp;uu们分享的面经进行学习。很多同学有这样的疑惑,为什么我记了忘,忘了记,记了又忘?是因为我们做了太多的输入而没有去输出去检验我们的掌握情况,以致于在面试的时候突然脑袋空白,曾经掌握的知识成了熟悉的陌生人。首先我们背诵是基于知识理解的背诵,我们要先掌握知识本身,并根据某一个问题去思考还有哪些是可能会被考察到的,做一个思维的发散性处理,可以将问题或者我们的答案喂给ai让他去做一个润色和补充。我在准备实习的时候我在谷歌下了一个chatgpt,其实豆包也可以,先给他预设你应聘的岗位,让他模拟面试官,让他根据你的问题和回答做出评分以及给出较为标准的回答,打开语音功能,这样你就可以先给出问题然后回答去检验自己的掌握情况啦。当然这个过程比较耗时,大家可以根据具体的问题做取舍。如果是要面试大厂,常见的数据结构和********需要去再复习,一般面试中的笔试都是再hot100和面试150中出,前端的同学就还可能会涉及到一些常见js手撕的考察或者简单组件的编写。项目的话可以在github找或者在b站找一两个项目跟着视频来做,写在简历上的话最后有两个项目,可以一个简单一个复杂一点,面试介绍的时候可以着重讲复杂的那一个。最后有一些综合性的我想到啥说啥了哈大胆地进行投递,适当的把目标订的高一些,不要妄自菲薄,瞻前顾后,因为不可能做到100%准备好,不要想我这么菜面大厂不是白给吗,面了也是白面干脆不投了。担心自己能力不行晚点投递ok,但是不能不投,你可以从小厂投,熟悉流程再投大厂没问题,但是不能直接放弃,始终对自己要保持比较高的要求。比方说我们准备期末考试,我们做准备考100分的准备最后能考80,我们做考80分的准备最后考60,面试也是一样,当你被上面的厂拷打麻了,后面的面试才能慢慢地扛得住压力,哪怕进不去大厂,我们在尝试中厂的时候会猛然发现,好像豁然开朗。当然对于年级比较低的同学,可以先在小厂锻炼自己然后再跳到中大厂也是不错的选择作为实习岗位,面试官其实更看中你的潜力以及对于这个岗位的积极性,在面试过程中你需要多分享你对某个问题具体的思考,比如你是怎么做的,我还能怎么做,我这样做比那样做的优势在哪些地方。还有就是要真诚,比如我不会某一个面试官问的问题,你可以先说自己在这块领域不是很了解,但是我可以往哪方面去思考去类比,而不是答非所问或者胡言乱语了半天。面试到最后一般会有一个反问环节,大家可以在面试前准备一下自己要问什么,主要凸出自己对面试这个岗位的和自我成长的积极性,比如团队业务,面试轮次,学习一些建议都可以,或者有些公司可能会提及到ai工具,可以问公司ai工具的普及率使用率都可以暂时是这么一些,后续想到会再做补充,欢迎大家评论区讨论呢~(附一张白云山猫猫)
0经验如何找实习?
点赞 评论 收藏
分享
评论
16
109
分享

创作者周榜

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