百度春招四道

作者: _Kantin | 来源:发表于2017-08-17 16:21 被阅读61次

(1)度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
例如:输入:10 20 10 20 30 30 30 40 40 输出:30
(先对数组进行排序,之后即计算前后两个数组不同的次数,当次数等于2的时,则取到第三个。从1开始for循环的,所以取得arr[i]即可。同理若是欲取倒数第三大数,则把数组降序排序即可。若count++小于欲取的数的次数(n),则输入取不到,输出-1)

     public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int len = sc.nextInt();
        int[] arr = new int[len];
        for(int i=0;i<len;i++){
            arr[i]=sc.nextInt();
        }
        Arrays.sort(arr);
        int count =0;
        for(int i=1;i<len;i++){
           //关键在这里--表示前后两个数改变了
            if(arr[i-1]!=arr[i]){
                count++;
            }
            if(count==2){
                System.out.println(arr[i]);
                break;
            }
        }
        if (count<2){
            System.out.println("-1");
        }
    }

(2)一个数轴上共有N个点,第一个点的坐标是度度熊现在位置,第N-1个点是度度熊的家。现在他需要依次的从0号坐标走到N-1号坐标。但是除了0号坐标和N-1号坐标,他可以在其余的N-2个坐标中选出一个点,并直接将这个点忽略掉,问度度熊回家至少走多少距离?


image.png

(依次取三个节点,用前一个节点减去后一个节点,再间隔相减取得三个点的最大间隔)

     public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int len = sc.nextInt();
        int[] arr = new int[len];
        int sum=0,max=Integer.MIN_VALUE;
        for(int i=0;i<len;i++){
            arr[i]=sc.nextInt();
            if(i!=0){
                sum+=Math.abs(arr[i]-arr[i-1]);
            }
        }
        for(int i=1;i<len-1;i++){
            int temp = Math.abs(arr[i]-arr[i-1])+Math.abs(arr[i+1]-arr[i])-Math.abs(arr[i+1]-arr[i-1]);
            if(temp>max){
                max=temp;
            }
        }
        System.out.println(sum-max);
    }

(3)度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?

(用一个数组把所输入数字排序,之后与原数组比较,有相同的序列的则是不用进行排序的了)

      public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int len = sc.nextInt();
        int[] arr = new int[len];
        int[] sort = new int[len];
        for(int i=0;i<len;i++){
            arr[i]=sc.nextInt();
            sort[i]=arr[i];
        }
        Arrays.sort(sort);
        int index=0;
        for(int i=0;i<len;i++){
            if(arr[i]==sort[index]){
                index++;
            }
        }
        System.out.println(len-index);
    }

(4)随机的生成20个小写字母,并实现排序的输出

  public class Problem4 {
    public static void main(String[] args) {
        TreeSet<Character> tree = new TreeSet<>(new Comparator<Character>() {
            @Override
            public int compare(Character o1, Character o2) {
                if(o1 < o2){
                    return -1;
                }else if (o1 > o2){
                    return 1;
                }
                  return 0;
            }
        });
            while(tree.size()<20){
                char str = getRandomChar();
                tree.add(str);
            }

        for(Iterator iter = tree.iterator(); iter.hasNext(); ) {
            System.out.println(iter.next());

        }

    }
    private static char getRandomChar() {
        Random rand = new Random();
        int value =rand.nextInt();
        int i =(value%26)+97;
        i=i%26;
        i=i+97;
        return  (char) i;
    }
}

相关文章

网友评论

    本文标题:百度春招四道

    本文链接:https://www.haomeiwen.com/subject/kwhnrxtx.html