美团技术岗笔试题
时间: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));
}
#美团笔试##你都收到了哪些公司的感谢信?##如何判断面试是否凉了#