347. 前 K 个高频元素
# 347. 前 K 个高频元素 (opens new window)
# 1.暴力
先用哈希存储对应每个元素的使用次数。因为每个元素最多出现次数为nums.length,可以从大到小遍历判断哈希的value使用次数是否等于i,如果是则将key加入数组中。通过这种方式获取到的k个数一定就是使用次数最高的k个元素。
class Solution {
public int[] topKFrequent(int[] nums, int k) {
HashMap<Integer,Integer> map=new HashMap<>();
int[] res=new int[k];
for(int i=0;i<nums.length;i++){
map.put(nums[i],map.getOrDefault(nums[i],0)+1);
}
int index=0;
for(int i=nums.length;i>=0;i--){
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
Integer key = entry.getKey();
Integer value = entry.getValue();
if(value==i&&index<k) res[index++]=key;
}
}
return res;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 2.快排
思路和上面类似,通过map.entrySet()取出对应的键值对放入到数组中,然后对数组进行快排,交换时同时移动key。
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57