• 奇妙的算法【5】-条件排序


      某公司有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
     */
  • 相关阅读:
    Makefile学习笔记1
    Shell脚本学习笔记8——跳出循环
    Shell脚本学习笔记7——case...esac
    Shell脚本学习笔记6——循环语句
    Linux命令学习笔记3:touch命令
    Linux命令学习笔记2:ll命令
    Linux命令学习笔记1:ln命令
    Shell脚本学习笔记5——if条件语句
    Shell 脚本学习笔记4——Shell脚本中 '$' 符号的多种用法
    利用C++创建DLL并C#调用
  • 原文地址:https://www.cnblogs.com/Mufasa/p/11427781.html
Copyright © 2020-2023  润新知