美团技术岗笔试题

时间:10月12日晚7点

心情:极其糟糕

原因:美团要痛失一位人才,为美团遗憾

题目大意:给一个k值和一个字符串(只有小写字母和数字),摘取字符串中的数字并排序,返回第k个数字。如果没有返回“N”。

这题看完 就是双指针,但是当时 AAAAAAAAAAAAAAA ,逻辑不对没跑出来。

这个题有个灵光一现的点在于字符串的预处理---扩充

  1. 本题如果进行遍历后尾字符是 数字 ,则完成不了最后一环的数字写入,例如 ab1,右指针在判断完 ‘1’ 后就结束了,不会将数字写入。
  2. 预处理将字符串添加一位字母,这样都保证不出现上述情况,并且题目并不在乎字母

之后的排序和输出就是和简单的事情了,但有一个知识点需要注意的是

  1. Arrays.sort()是对数组进行排序,对列表无感
  2. Collections.sort()可以对列表进行排序
  3. 这两个函数都是默认正序,倒序的话是有些复杂的,一般情况就别给自己加麻烦了
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));
    }

#美团笔试##你都收到了哪些公司的感谢信?##如何判断面试是否凉了#
全部评论
换python就可以了
1 回复 分享
发布于 10-13 19:34 湖南
java的整形可以存大数吗? cpp用64位无符号是溢出的
点赞 回复 分享
发布于 10-12 23:53 江苏
存字符串就行了,整数可能很大。
点赞 回复 分享
发布于 10-14 10:03 广东
Python的话,可以把所有字母全replace成空格,然后split,得到所有数字的列表,再转为int,再sort,返回第k个,好像小几行搞定
点赞 回复 分享
发布于 10-23 15:16 山东
这不是vector把数字拿到排个序看长度拿值就行吗
点赞 回复 分享
发布于 11-05 13:02 山东

相关推荐

2 1 评论
分享
牛客网
牛客企业服务