美团笔试


第一题


给定一个数组,判断数组是否符合升序,以及数组元素两两相减后得到新的数组是否降序

思路:打卡题,正常判断即可

public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
   int arrayLength = in.nextInt();
   long [] array = new long[arrayLength];
   int i=0;
   while (i<arrayLength) {
       array[i] = in.nextLong();
       i++;
  }
   long [] bArray = new long[arrayLength-1];
   //1.判断数组a是否严格递增
   for (int j = 0; j+1 < array.length; j++) {
       long bj = array[j + 1] - array[j];
       if (bj<=0){
           System.out.println("No");
           return;
      }
       bArray[j] = bj;
  }
   //2.判断b数组是否严格递增
   for (int k = bArray.length-1; k-1>0; k--) {
       if (bArray[k]-bArray[k-1]<=0){
           System.out.println("No");
           return;
      }
  }
   //3.a,b数组均符合条件
   System.out.println("Yes");
}




第二题


给定两个整数i,j,i表示字符串输入的个数,j表示字符串中字符的个数,问在j个字符串中能否拼凑出“meituan字符,如果能则输出YES,不能则输出NO

思路:哈希解法,将所有字符串拼成一个完整的字符串,再将字符串转为字符数组存储在map集合中,最后进行判断即可

另一种思路:牛客上面有人提供了dp的思路

public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
   int lineNum=0;
   int charLength=0;
   lineNum = in.nextInt();
   charLength = in.nextInt();
   int j =0;
   String [] strArray = new String[lineNum];
   while (j<lineNum){
        strArray[j]= in.next();
        j++;
  }
   StringBuilder sb = new StringBuilder();
   for (String s : strArray) {
       sb.append(s);
  }
   char[] chars = sb.toString().toCharArray();
   Map<Character,Boolean> map = new HashMap<>();
   for (char aChar : chars) {
       map.put(aChar,true);
  }
   String result = "meituan";
   for (char c : result.toCharArray()) {
       if (!map.containsKey(c)) {
           System.out.println("NO");
           return;
      }
  }
   System.out.println("YES");
}




第三题


小美拿到了一个数组。她每次可以进行如下操作之一:

  1. 选择一个元素,使其乘以 2。
  2. 选择一个元素,使其除以 2,向下取整

小美希望第一个元素变成所有元素的最大值。请你判断小美最少需要操作多少次?

思路:暴力解法即可,类型用long

public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
   int arrayLength = in.nextInt();
   long [] array = new long[arrayLength];
   int i = 0;
   while (i < arrayLength) {
       array[i] = in.nextLong();
       i++;
  }
   long[] copyArray = Arrays.copyOfRange(array, 0, arrayLength);
   Arrays.sort(copyArray);
   long maxNum =copyArray[copyArray.length-1];
   long firstNum = array[0];
   //记录*2操作的次数
   int mOperationNum=0;
   while (firstNum<maxNum){
       firstNum = firstNum*2;
       mOperationNum++;
  }
   //记录/2操作的次数
   firstNum = array[0];
   int m2OperationNum=0;
   for (int j = copyArray.length-1; j > 0; j--) {
       long l = copyArray[j];
       while (firstNum<l){
           l = l/2;
           m2OperationNum++;
      }
  }
   System.out.println(Math.min(mOperationNum, m2OperationNum));
}




第四题


小美有一个数组,她希望删除k个元素,使得剩余的元素两两之间互为倍数关系。你能告诉小美有多少种删除方案吗?

由于答案过大,请对10^9+7模


思路:没有思路

当时做题时的想法:当我想到删除的k个元素是动态变化的,我就知道是暴力解法是暴力不出所有解决方案的,而且时间也肯定会超时,我就意识到这道题目是要用dp来解了,可是我算法还没刷到dp啊,呜呜




第五题


原题:小美有很多的彩虹糖,每颗彩虹糖都有一个颜色,她每天可以吃两颗彩虹糖,如果今天吃的彩虹糖组合是之前没吃过的组合,则小美今天会很高兴。

例如,小美有 6 颗彩虹糖,颜色分别是 ![[1,1,4,5,1,4]]。

小红第一天吃一组颜色为 1 和 4 的彩虹糖,小美会很高兴;

第二天吃一组颜色为 4 和 1 的彩虹糖,小美不会很高兴;

第三天小美吃一组颜色为 1 和 5 的彩虹糖,小美会很高兴,此时小美共有 2 天很高兴。

小美想知道,她最多有几天会很高兴


题目翻译版本:给定一个数组,每次可以取两个元素,问最多有多少种不同的组合;已经组合过的元素不能再重复使用


思路:没时间+没思路,感觉有点像背包问题,背包怎样装货物重量最多,应该可以贪心算法来解的




笔试注意事项


1.提前调好闹钟,不要错过笔试时间;最好提前调一个小时的闹钟;(曾因为忘记时间错过美团笔试以及今天小米笔试晚进了半个小时,导致算法题时间紧张)

2.一定要看编程题注意事项,能否用本地编译环境,能否线上调试,输入输出的案例(如果没看的话,可能连输入输出都要捣鼓很长时间),类的命名和方法的命名

3.记得写导包语句呀,不要像我那么蠢一个一个导包呀,直接导java.utils.*就行了;而且有些公司的笔试是不会提示包路径的,这种时候就要自己平时记住常用类的包路径了


每家公司的笔试都一定的差异,记得提前查看笔试注意事项,能避免很多细节的坑(留下了不学无术的眼泪)




遗憾

今晚小米笔试的算法题感觉格外简单,而我却因为忘记笔试时间导致时间不足,过度紧张,最终完美错过这个机会,心里还是有点愤愤不平的,但忘记时间也是我自己综合实力的一种,得承认自己的不足

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
哒
作者分享
长沙某厂笔试(6小时)
14
微众银行笔试
21
自秋招开启以来,但凡是大一点的公司,算法题都要求是ACM模式,leetcode刷题的时候一定要学会舍弃核心代码模式呀,要不然笔试的时候,测试用例都想不出来[流泪]
20
寄,nio蔚来笔试选择题基本全是c 的指针相关的题目,我明明投的是Java岗位呀,呜呜 算法题 1.求最长的子序列,子序列节点之间可以跳跃,既没有连续性要求(疑似滑动窗口算法,但改动了连续性的条件) A.两个节点之间要求是递增的 B.两个节点之间要求能够整除 2.n组字符串经过n次操作,字符串两两比较,返回true or false 3.小红走路地图题,疑似动态规划 或者贪心算法(一点思路都没用) 算法题A出一道半 寄中寄[流泪]
16
2023/8/24 实习Day04 因为我旁边的实习生想要辞职全力备战秋招,然后他的leader过来劝说他,跟我们分享了跟多,他的leader作为管理层,跟我们分享了很多管理层的思维,比如 1.不要在意局部最优解,要有长远的目光 2.不要在意毕业薪资多少,要更看重平台,更看重成长,同样是工作几年,工作后的差距才是巨大的 3.要敢于冒险,敢于拼搏,不要过于求稳,过于求稳永远都得不到较大的价值(说年轻人的试错成本是最低的,大不了从头再来) 4.做事情要沉得住气,不要太在意得失,还举了一个他认识的老板案例,在入行之前,调研了行业整整三年,摸透了所有赛道后才找到了一条比较好的赛道,最终创业成功 还有很多很多思维,自己暂时还领略不到,我自己还是更局限在一个普通人的视角,想着端稳饭碗的视角,leader也理解我们的难处,后面彼此交谈了很久,谈话时长从今晚的8点聊到了10点半,开始只有三个人的,后面越来越多人围过来听,甚至正式岗位的也围过来听leader分享 感觉这家公司氛围真的很好,管理层也真诚,没什么架子,真正把他心里面的东西分享出来,想给我们实习生一些帮助 虽然今晚得到明确答案,公司基本没有转正hc,因为目前公司业务没有扩展,公司目前在岗人数也足够业务了,而且她还透露今年互联网行业仍在走下坡路,大家都还在紧衣缩食,但应届生的数量是不断的在增多,所以今年求职难基本是避免不了的 虽然公司没有转正hc,但我还是庆幸我来到一家这么好的公司,特别是这里的人都很真诚,相处的都很舒服,彼此都互相帮助,真的非常非常的nice
46
下载 APP