【力扣题解】1636. 按照频率将数组升序排序
😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
-
- 一、题目
-
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
-
- 1、思路分析
- 2、代码详解
- 三、本题知识
一、题目
1、题目描述
给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。请你返回排序后的数组。
2、基础框架
- Java版本框架代码如下:
class Solution { public int[] frequencySort(int[] nums) { }}
3、原题链接
1636. 按照频率将数组升序排序
二、解题报告
1、思路分析
(1)先定义一个哈希表,Key的值是nums[i],Value的值是nums[i]的频率,遍历数组统计每个数的频率。
(2)根据题目要求自定义一个排序,然后排序即可。
2、代码详解
class Solution { public int[] frequencySort(int[] nums) { Map<Integer,Integer> map = new HashMap(); for(int i = 0;i < nums.length;i++) { if(!map.containsKey(nums[i])) { map.put(nums[i],1); }else { map.put(nums[i],map.get(nums[i]) + 1); } } //int[] 转化为Integer[] Integer[] tmp = Arrays.stream(nums).boxed().toArray(Integer[]::new); Arrays.sort(tmp, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { if(map.get(o1) == map.get(o2)) { return o2 - o1; } return map.get(o1)-map.get(o2); } }); //Integer[] 转化为int[] return Arrays.stream(tmp).mapToInt(Integer::valueOf).toArray(); }}
三、本题知识
自定义排序
在Java中,用Arrays.sort()实现自定义排序需要实现Comparator接口,然后重写compare()方法。