失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 按照频率将数组升序排序

按照频率将数组升序排序

时间:2020-01-14 14:50:02

相关推荐

按照频率将数组升序排序

题目链接

按照频率将数组升序排序

题目描述

注意

将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们降序排序。

解答思路

先使用一个numMap存储数组中的元素以及出现的频率,其中key为元素,value为频率,再用另一个freMap存储出现的频率以及对应的数字,其中key为频率,value为元素列表,再将freMap中的key进行升序排序,对每个频率下的元素列表进行降序排序,并输出

代码

class Solution {public int[] frequencySort(int[] nums) {// 将每个数字对应频率存储到numMap中Map<Integer, Integer> numMap = new HashMap<>();for(int i = 0; i < nums.length; i++) {numMap.put(nums[i], numMap.getOrDefault(nums[i], 0) + 1);}// 将每个频率对应数字存储到freMap中Map<Integer, List<Integer>> freMap = new HashMap<>();for(Integer key : numMap.keySet()) {// 出现的频率int freq = numMap.get(key);List<Integer> tmp = new ArrayList<>();if(freMap.containsKey(freq)) {tmp = freMap.get(freq);}tmp.add(key);freMap.put(freq, tmp);}// 对频率进行排序Set<Integer> set = freMap.keySet();Integer[] arr = set.toArray(new Integer[set.size()]);Arrays.sort(arr);int index = 0;for(int i = 0; i < arr.length; i++) {// 对应频率int freq = arr[i];// 对应数字List<Integer> tmp = freMap.get(freq);Collections.sort(tmp, Collections.reverseOrder());for(int j = 0; j < tmp.size(); j++) {int num = tmp.get(j);for(int k = 0; k < freq; k++) {nums[index] = num;index++;}}}return nums;}}

关键点

使用一个numMap存储数组中的元素以及出现的频率,再用另一个freMap存储出现的频率以及对应的数字对Map中的key进行排序的方法以及对列表中的元素进行降序排序的方法

如果觉得《按照频率将数组升序排序》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。