java刷题(7)

王子豪 酷炫吊炸天 2022-10-23 11:38:20

频率排序

给 定一个 int 数组,统计数组中每个数字出现的次数,并按数字出现的次数进行排序(从大到小),将结果以 Map 返回,其中 key 为数字出现的次数,value 为出现过 key 次的所有数字集合(从小到大排序)。

import java.util.*;
​
public class Solution {
    public Map<Integer, List<Integer>> orderByFrequency(int[] nums) {
        // write your code here
       //获取每个数字出现的次数,并放入默认升序key的TreeMap中,key为数字,value为出现次数。
       Map<Integer, Integer> treemap = new TreeMap<>();
        for(int num : nums) {
            Integer frequency = treemap.get(num);
            frequency = null==frequency ? 1 : frequency+1;
            treemap.put(num, frequency);
        }
        Iterator itr = treemap.keySet().iterator();
        //创建降序key的TreeMap
        Map<Integer, List<Integer>> result = new TreeMap<>(new Comparator<Integer>(){
            @Override
            public int compare(Integer a, Integer b) {
                return b.compareTo(a);
            }
       });
        //循环treemap,将value(出现次数)放入到result的key中,将key(数字)放入到result的value中。
        while(itr.hasNext()) {
            Integer key = (Integer)itr.next();
            Integer value = treemap.get(key);
            List<Integer> res = result.get(value);
            if(null == res) {
                res = new ArrayList<>(); 
                result.put(value, res);
            }
            res.add(key);
        }
        return result;
    }
​
}
import java.lang.reflect.*;
import java.util.*;
​
​
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
​
        String in = sc.nextLine();
        String[] str = in.replace("[", "").replace("]", "").trim().split(",");
        int[] nums = new int[str.length];
        for (int i = 0; i < str.length; i++) {
            try {
                nums[i] = Integer.parseInt(str[i].trim());
            } catch (Exception e) {
                nums[i] = 0;
            }
        }
        Solution solution = new Solution();
        System.out.println(solution.orderByFrequency(nums));
​
        sc.close();
    }
}
...全文
41 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-Java 发布问题, 以便更快地解决您的疑问

50

社区成员

发帖
与我相关
我的任务
社区描述
产学研究,学术传承
社区管理员
  • 又菜又爱玩呜呜呜~
  • 两年半的个人练习生^_^
  • yolanda19910002
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧