某公司有N名员工。给定所有员工工资清单,财务人员要按照特定的顺序排列员工的工资。他按照工资的频次降序排列,即给定清单中所有频次较高的工资在频次较低的工资之前出现。如果相同数量的员工都有相同的工资,则按照给定清单中该工资第一次出现的排序排列。
package com.cnblogs.mufasa.help; import java.util.ArrayList; import java.util.List; public class Answer2 { public List<Integer> salaryfrequeny(int num, int[] salaries){ List<Integer> dataOut=new ArrayList<>(); List<Integer> nums=new ArrayList<>(); for(int i=0;i<num;i++){ if(!dataOut.contains(salaries[i])){//不存在 dataOut.add(salaries[i]); nums.add(1); }else {//存在 int index=dataOut.indexOf(salaries[i]); nums.set(index,nums.get(index)+1); } } //冒泡排序【可以使用其他排序方法加快速度】 for(int i=0;i<dataOut.size()-1;i++){//【算法复杂度,O(2^n)】 for(int j=0;j<dataOut.size()-1-i;j++){ if(nums.get(j)<nums.get(j+1)){ int temp=nums.get(j); nums.set(j,nums.get(j+1)); nums.set(j+1,temp); int temp1=dataOut.get(j); dataOut.set(j,dataOut.get(j+1)); dataOut.set(j+1,temp1); } } } List<Integer> arr=new ArrayList<>();//还原所需数据 for (int i=0;i<dataOut.size();i++){ for (int j=0;j<nums.get(i);j++){ arr.add(dataOut.get(i)); } } return arr; } } class Client{ public static void main(String[] args) { int num=19; int[] salaries={1,2,4,3,3,3,4,2,5,5,5,5,6,6,6,7,8,9,10}; Answer2 as=new Answer2(); List<Integer> list=as.salaryfrequeny(num,salaries); list.forEach((temp)->{ System.out.print(temp+"-"); }); } } /* 19 1,2,4,3,3,3,4,2,5,5,5,5,6,6,6,7,8,9,10 */