中兴8月1号笔试题---工资排序问题

         给N名员工的工资清单,按照工资分布的人数降序排序,如果有两个工资的人的数目一致(大概意思就是假设3000工资有3个人,5000也是三个人),就按照工资在给定清单的顺序里面排序。

       解题思路:这道题的解题思路很简单,先统计每个工资有多少人,然后按照工资的人数降序打印出来。

       代码:

import java.util.*;
public class SaralySort {

    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int nums[]=new int[n];
        for (int i=0;i<n;i++){
            nums[i]=sc.nextInt();
        }
        List<Integer>res=saraly(nums);
        for(int i=0;i<res.size();i++){
            System.out.print(res.get(i)+"  ");
        }

    }

    public static List<Integer> saraly( int nums[]){
        if(nums==null||nums.length==0)
            return null;
        int length=nums.length;
        //新建一个计数数组,count[i][0]表示薪资,count[i][1]表示薪水出现次数。
        int[][] counts=new int[length][2];
        //用一个key来记录counts这个数组实际使用多少
        int key=0;
        for(int i=0;i<length;i++){
            //遍历,如果数组中已经存在,就把次数加一,否则的话就往数组后面加
            for(int j=0;j<=key;j++){
                if(nums[i]==counts[j][0]){
                    counts[j][1]++;
                    break;
                }
                if(j==key){
                    counts[j][0]=nums[i];
                    counts[j][1]=1;
                    key++;
                    break;
                }
            }
        }
        Arrays.sort(counts, new Comparator<int[]>(){
            @Override
            public int compare( int[] o1, int[] o2 ) {
                //因为相当于次数的降序,所以用的o2[1]-o1[1]
                return o2[1]-o1[1];
            }
        });
        List<Integer>list=new ArrayList<>();
        for(int i=0;i<key;i++){
            for(int j=0;j<counts[i][1];j++){
                list.add(counts[i][0]);
            }
        }
        return list;
    }
}
上一篇:有参数返回的Lambda


下一篇:卡常技巧