按照频率将数组升序排序

题解方法

  • 哈希
  • 排序

哈希

  • 哈希存储数值出现的频率

排序

  • Map 本身无法自定义排序,需要将 Map.Entry 转换为 List 进行排序处理
  • 根据数值的频率升序排列,如果多个值的频率相同,则按照数值大小降序排列

核心代码

哈希

1
2
3
4
5
Map<Integer, Integer> count = new HashMap<>(100);

for (int num: nums) {
count.put(num, count.getOrDefault(num, 0) + 1);
}

排序

1
2
3
4
5
6
7
List<Map.Entry<Integer, Integer>> entries = new ArrayList<>(count.entrySet());
entries.sort((o1, o2) -> {
if (o2.getValue().equals(o1.getValue())) {
return o2.getKey() - o1.getKey();
}
return o1.getValue() - o2.getValue();
});

题目来源

1636. 按照频率将数组升序排序 - 力扣(LeetCode)