mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
@ -188,7 +188,33 @@ class Solution {
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
简化版代码:
|
||||
```java
|
||||
class Solution {
|
||||
public int[] topKFrequent(int[] nums, int k) {
|
||||
// 优先级队列,为了避免复杂 api 操作,pq 存储数组
|
||||
// lambda 表达式设置优先级队列从大到小存储 o1 - o2 为从大到小,o2 - o1 反之
|
||||
PriorityQueue<int[]> pq = new PriorityQueue<>((o1, o2) -> o1[1] - o2[1]);
|
||||
int[] res = new int[k]; // 答案数组为 k 个元素
|
||||
Map<Integer, Integer> map = new HashMap<>(); // 记录元素出现次数
|
||||
for(int num : nums) map.put(num, map.getOrDefault(num, 0) + 1);
|
||||
for(var x : map.entrySet()) { // entrySet 获取 k-v Set 集合
|
||||
// 将 kv 转化成数组
|
||||
int[] tmp = new int[2];
|
||||
tmp[0] = x.getKey();
|
||||
tmp[1] = x.getValue();
|
||||
pq.offer(tmp);
|
||||
if(pq.size() > k) {
|
||||
pq.poll();
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < k; i ++) {
|
||||
res[i] = pq.poll()[0]; // 获取优先队列里的元素
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Python:
|
||||
```python
|
||||
|
Reference in New Issue
Block a user