美团技术岗笔试题
时间:10月12日晚7点
心情:极其糟糕
原因:美团要痛失一位人才,为美团遗憾
题目大意:给一个k值和一个字符串(只有小写字母和数字),摘取字符串中的数字并排序,返回第k个数字。如果没有返回“N”。
这题看完 就是双指针,但是当时 AAAAAAAAAAAAAAA ,逻辑不对没跑出来。
这个题有个灵光一现的点在于字符串的预处理---扩充
- 本题如果进行遍历后尾字符是 数字 ,则完成不了最后一环的数字写入,例如 ab1,右指针在判断完 ‘1’ 后就结束了,不会将数字写入。
- 预处理将字符串添加一位字母,这样都保证不出现上述情况,并且题目并不在乎字母
之后的排序和输出就是和简单的事情了,但有一个知识点需要注意的是
- Arrays.sort()是对数组进行排序,对列表无感
- Collections.sort()可以对列表进行排序
- 这两个函数都是默认正序,倒序的话是有些复杂的,一般情况就别给自己加麻烦了
public static void main(String[] args) { Scanner scan = new Scanner(System.in); int k = scan.nextInt(); String s = scan.next(); s = s + "a"; //扩充字符串,删去尾串判断 int left = 0,right = 0; ArrayList<Integer> list = new ArrayList<>(); //因不知道多少个数字,使用列表存 while (right<s.length()){ if (s.charAt(right)>=48&&s.charAt(right)<=57){ right++; }else { if(s.charAt(left)>=48&&s.charAt(left)<=57){ //左指针判断是否要存入 list.add(Integer.parseInt(s.substring(left,right))); left = right+1; }else { //移位 left++; } right++; } } Collections.sort(list); //排序 if(k>list.size()){ System.out.println("N"); }else System.out.println(list.get(list.size()-k)); }#美团笔试##你都收到了哪些公司的感谢信?##如何判断面试是否凉了#