前 K 个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

https://leetcode.cn/problems/top-k-frequent-elements/description/

思路

1:先建立 value —> frequent 映射

2:按照frequent给value排序

3:取前 k 个高频元素放进结果数组返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

class Solution {
public int[] topKFrequent(int[] nums, int k) {

Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
if (map.containsKey(num)) {
map.put(num, map.get(num) + 1);
} else {
map.put(num, 1);
}
}

//把所有不重复的数字放进 List,并根据它们在 map 中的出现次数从大到小排序
List<Integer> list = new ArrayList<>(map.keySet());
list.sort((a, b) -> map.get(b) - map.get(a));

// 取前 k 个高频元素放进结果数组返回
int[] res = new int[k];
for (int i = 0; i < k; i++) {
res[i] = list.get(i);
}
return res;
}
}