就2022-03-12下午四点的美团笔试发表一些感想
上来就直接说一下我做的题吧,后面再写感想(因为没人看)。😂
本次笔试(我做的),一共有 5 道编程题。
题目一
大概意思就是,输入 n 个数,然后让你判断是否为 true 或者 false。判断条件:是 11 的整数倍,或者这个数本身至少包含 2 个1。前面这个条件很好判断,直接
if (i % 11 == 0) { }就好了。至于后面一个条件,我们自定义一个函数
// num 是我们要判断的那个数字 public boolean isValid(int num) { // 先将 num 转换成 String 类型,然后转成 char 类型的数组 String numStr = num + ""; Char[] chrs = numStr.toCharArray(); int num = 0; // 用于存放整数到底有多少个 1 for (char chr : chrs) { if (chr == '1') { // 如果是 1,num++ num++; } } // 判断 num 是否大于等于2 return num >= 2 ? true : false; }代码可能有问题,但是大致思路就是这样,将就一下下吧,抱歉。
题目二
这道题目就是给定一个数组,里面存放的数据是 1 或者 -1,让你找出乘积为 1 的子序列一共有多少个。题目的意思大概是这样啦。第一眼看这道题目,我就知道要用动态规划(因为基本上我做的动态规划的题目都长这样😂),但是,我不会......
其实我感觉这道题和 找最长子序列 这道题目挺像的,后者我才刚写完没几天。但是,我不知道怎么找那个 状态转移方程,然后就随便写了点代码上去,就交了。其实,我想过用 暴力破解法 的,但是我怕被嫌弃。🙃
题目三
这道题目就挺有意思的,应该和美团的业务挺贴切的。题目的大致意思就是:小美手头只剩下了一些食材,只够做几道菜肴了。(这里隐藏了一个很重要的条件,就是每到菜肴的剩余数量是 1),然后,同时,注意,是同时,来了一波客人,每位客人
都会点两道菜,让你找出能让最多客人满意的方案。(就是说,最终有些客人是无法满足的,我们应该让尽量多的客人满足)。
看完题目,我就立马想到是贪心策略。但是呢,这个贪心策略的选取很重要。说点小知识
贪心策略的题目一般有一个套路。就是当你得到一组数据的时候,你就要去想方设法构造一个比较器,也就是如何将这一组数据进行排序,可以获得较优解。然后,得到这个比较器,并对这组数据进行排序后,按照题目意思,一点一点的敲出代码了(听君一席话,如听君一席话😂)
我就没想到特别好的办法,虽然题目说所有客人是同时到达的,但是,你输入的数据总有个先后顺序吧,那我就按照这个顺序依次满足每一位客人。😂
题目四
这道题的关键就是,你一定要读懂题目的游戏规则。题目的大致意思就是:小美玩游戏,在游戏中,她有一个角色,初始时是一号房间。然后,游戏持续时间是 m 秒,每一秒都有一个房间会有炸弹,一共有 n 个房间。角色每一次从一个房间,移动到另一个房间,都要消耗 1 个单位的能量。问,最终无伤通关需要消耗的最少能量?(也就是说,在当前时刻,如果角色所处的房间有炸弹,你就必须移动角色到一个没有炸弹的房间里面去,在这过程中,你会消耗 1 个单位的能量)。
又是一道贪心策略问题。幸运的是,我应该想到了一个很好的贪心方法,比较悲惨的是,我没有时间去实现这个代码,只通过了 50% 的用例,剩下的代码只能通过写思路告诉考官。(希望考官能看到😀😀😀)
思路就是,在当前时刻 i ,如果你所在的房间有炸弹,你就要转移到另一个没有炸弹的房间。那么,这个转移的房间,就关系到你的 最少能量!!!如何选取,很关键!!!你不是已经得到了一个数组,里面记录着每个时间点有炸弹的房间嘛。然后,你就通过这个数组,求出每个房间有炸弹的概率,通过概率值,从小到大排序,那你每次选取房间的时候,都从概率最小的且当前没有炸弹的房间里选取就好啦!!!
题目五
貌似是什么黑白树。(因为是最后一题,没时间写代码实现了,呜呜呜!!!只写了一点点代码,剩下的全是思路,希望考官大人看一看,谢谢🤣)
题目看得很快,不是很记得,但是解题思路,我还是大致有哒。
思路,我个人做二叉树的题目,特别喜欢将这棵树转成一棵完全二叉树,然后用一个一维数组进行存储。主要是它有以下这些特性(一维数组存放完全二叉树)1)在不越界的情况下父节点的下标为 i 时,它的左右孩子节点的下标分别为 左孩子:2i+1 右孩子:2i+22)在不越界的情况下,下标为 i 的节点,它的父节点的下标为 (I-1)/2
有了以上特性,我们只要按照题目一步一步实现就可以了。
现在就有了一个问题,如何构造这么一棵完全二叉树?
1)先通过 广度优先遍历 找到这棵树的最后一个节点;2)然后,再次通过 广度优先遍历 构造一棵完全二叉树。此时,1)步骤中找到的这个节点就很关键啦。正常情况下,我们的循环条件是 队列不为空,那么在现在这种情况下,我们队列永远都不会为空。因为我们在入队时,如果发现当前节点的 左/右 节点为空时,我们为这些空节点统一创建为一种特殊的节点入队列(主要是后面用一维数组存放)。
如果是这样的话,我们就会认为,出队时的某个空节点它一样有左右孩子节点(都为空,但是用特殊的节点表示),循环就不会停止了。因此,没弹出一个节点,我们要判断它是否是最后一个节点,是,就退出循环,完全二叉树构造完成。
剩余的代码实现就挺简单的了,根据题目的意思就好啦。
以上就是我做的笔试的题目,如果有不对的地方,欢迎指正。(直接在评论区里说就好啦,原文我就懒得去改了😂)
说一下最近的心得吧。(没啥好看的🤪)
今年大三,事情真的很多。曾几何时,我觉得找一份实习挺容易的,今年过年回家,我才和家里人吹嘘,这个学期我马上就找到实习啦(没经过毒打)。然后,开学没多久,我就海投了很多很多的中小型公司。无一例外,简历石沉大海。幸运的是,
没过多久,班群就发来了字节跳动的内推,我兴致勃勃地投了简历,过了两三天,就告诉我准备笔试。(字节在效率这方面真的算挺快的了)。那时候,我真的挺兴奋和焦虑,因为是第一次投大厂,而且简历还过了,不知道怎么准备,就啥都复习一点。
当然,最终的结果就是,炸了。😔😔😔
真的挺后悔的,浪费了这么一次机会(虽然到现在流程上还在显示笔试中),但是我感觉大概率凉了。确确实实是自己的问题,没办法,毕竟第一次参加大厂的笔试。
然后,我意识到了算法的重要性,就拼命开始刷题。(到现在大概半个月 左右了吧)。
期间,我收到了 4399 的笔试邀请。然后,我准备充分后,参加了那次笔试。我自认为,我已经尽力了,很多题目都尽量去完成了。但很遗憾,前天收到了 感谢信😔😔😔。那一刻,有点想哭,
因为,那一次,我真的拼劲全力去完成这么一次笔试了,考完我还觉得至少有个面试的机会,能不能入不实习另说.....
后面也想通了,站在企业的角度,其实就是自己还不够优秀,和你一同竞争的人更加的优秀,要做的,是让自己做得更好。
期间还陆续参加了 阿里 的笔试。(不细说了,反正真的惨不忍睹。真的超级无敌难🙃🙃🙃)。就很抱歉,浪费了当初在牛客网认识的一名师兄给的内推,对不起!!!是我的问题。
今天美团笔试,我觉得真的是我参加过得所有笔试中,最舒服的一次啦!!!
1)美团的笔试,允许使用本地 IDEA!!!这对我来说真的很重要。还记得当时有个弹窗,大致意思就是,本地 IDEA,就是你编程的家,在家里,你才能更好的去做事。真的感动!!!😊😊😊2)美团的笔试,它用的貌似是它们自家研发的考试官网,提交代码真的相当舒心!!!不会说卡顿,或者说出bug之类的。3)昨天我也参加了美团的校招发布会,我觉得,美团对人才培养真的挺好哒,对新人挺友好的。
以上评价均基于本人的体验,如果有不同的想法,可以交流,别骂我。反正我是真的觉得挺舒服的。
总结,也没啥好说的了,反正非常感谢美团给我的这次笔试机会,我真的体验到了一把。顺带,帮我检验了一下我近期的学习状况😂🤣。真的非常感谢美团!!!😀😊
#美团笔试##美团##笔经#