😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
一、题目
1、题目描述
给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。请你返回排序后的数组。
2、基础框架
- Java版本框架代码如下:
class Solution {
public int[] frequencySort(int[] nums) {
}
}
3、原题链接
二、解题报告
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()方法。