leetcode347 java
时间: 2024-05-31 10:06:39 浏览: 106
leetcode347是一道经典的算法题,题目要求在给定的整数数组中找到出现频率前k高的元素。常见的解法有使用哈希表记录元素出现次数,然后进行排序或者使用堆来找到前k高的元素。
以下是使用哈希表和堆两种解法的示例代码(java):
1. 使用哈希表:
```java
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
PriorityQueue<Map.Entry<Integer, Integer>> heap = new PriorityQueue<>((a, b) -> a.getValue() - b.getValue());
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
heap.offer(entry);
if (heap.size() > k) {
heap.poll();
}
}
int[] res = new int[k];
int i = 0;
while (!heap.isEmpty()) {
res[i++] = heap.poll().getKey();
}
return res;
}
}
```
2. 使用堆:
```java
class Solution {
public int[] topKFrequent(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
}
PriorityQueue<Map.Entry<Integer, Integer>> heap = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
heap.offer(entry);
}
int[] res = new int[k];
int i = 0;
while (i < k) {
res[i++] = heap.poll().getKey();
}
return res;
}
}
```
阅读全文