2019京东校招笔试题 合唱队形

合唱队形

题目描述:

合唱队的N名学生站成一排且从左到右编号为1到 N N N,其中编号为i的学生身高为 H i H_i Hi。现在将这些学生分为若干组(同一组的学生编号连续),并且让每组学生从左到右按照身高从低到高排序,使得最后所有学生同样满足从左到右身高从低到高(中间位置可以相等),那么最多能将这些学生分成多少组呢?

问题分析

利用辅助空间,复制一个数组,进行排序,记为copy。
注意到,arr数组在分块后,最终都要变为copy,可以设置两个变量用来记录当前和,相等之后就可以分组。

代码

 public int findMaxArr(int[] arr) {
        int[] copy = Arrays.copyOfRange(arr,0,arr.length);
        Arrays.sort(copy);
        int tmp1= 0, tmp2 =0,res=0;
        for(int i=0;i<arr.length;i++){
            tmp1+=arr[i];
            tmp2+=copy[i];
            if(tmp1==tmp2){
                res++;
                tmp1=0; //防止溢出
                tmp2=0;
            }
        }
        return res;
    }

你可能感兴趣的:(Java编程)