给定一个数组,求前k个最大的数,Java实现
时间: 2023-06-24 07:05:35 浏览: 85
可以使用最小堆来实现求前k个最大的数,具体步骤如下:
1. 建立一个大小为k的最小堆,堆中存放数组中前k个数;
2. 从第k+1个数开始遍历数组,如果当前数比最小堆的堆顶元素大,则将堆顶元素弹出,将当前数插入到堆中;
3. 遍历完整个数组后,最小堆中剩余的k个元素即为前k个最大的数。
Java代码如下:
```java
import java.util.PriorityQueue;
public class TopK {
public static int[] topK(int[] nums, int k) {
PriorityQueue<Integer> queue = new PriorityQueue<>(k);
for (int i = 0; i < k; i++) {
queue.offer(nums[i]);
}
for (int i = k; i < nums.length; i++) {
if (nums[i] > queue.peek()) {
queue.poll();
queue.offer(nums[i]);
}
}
int[] result = new int[k];
int i = 0;
for (int num : queue) {
result[i++] = num;
}
return result;
}
}
```
其中,PriorityQueue是Java中的优先队列,它默认是一个最小堆。在上述代码中,我们建立了一个最小堆,将数组中前k个数加入堆中。然后,从第k+1个数开始遍历数组,如果当前数比堆顶元素大,则将堆顶元素弹出,将当前数插入堆中。最后,将最小堆中剩余的k个元素取出,即为前k个最大的数。
阅读全文