347. Top K Frequent Elements
2026/1/12大约 1 分钟约 375 字
347. Top K Frequent Elements
难度: Medium
题目描述
Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.
Example 1:
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2:
Input: nums = [1], k = 1
Output: [1]
Example 3:
Input: nums = [1,2,1,2,1,2,3,1,3,2], k = 2
Output: [1,2]
Constraints:
1 <= nums.length <= 105-104 <= nums[i] <= 104kis in the range[1, the number of unique elements in the array].- It is guaranteed that the answer is unique.
Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
解题思路
代码实现
解决方案
java
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int i : nums) {
map.put(i, map.getOrDefault(i, 0) + 1);
}
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> {
return map.get(a) - map.get(b);
});
for (Integer key : map.keySet()) {
if (pq.size() < k) {
pq.offer(key);
} else if (map.get(key) > map.get(pq.peek())) {
pq.poll();
pq.offer(key);
}
}
int[] res = new int[pq.size()];
;
int i = 0;
while (!pq.isEmpty()) {
res[i++] = pq.poll();
}
return res;
}
}