Java实现数组找出第k大的数
时间: 2024-09-06 14:08:04 浏览: 60
在Java中,可以使用优先队列(PriorityQueue)结合排序算法来找到数组中的第k大的数。这里提供一种常见的在线解决方案,称为“最小堆”法:
```java
import java.util.PriorityQueue;
public class KthLargestNumber {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>((a, b) -> b - a); // 最小堆,存最大值
for (int num : nums) {
if (minHeap.size() < k) {
minHeap.offer(num);
} else if (num > minHeap.peek()) {
minHeap.poll(); // 如果当前元素大于堆顶元素,则替换堆顶
minHeap.offer(num);
}
}
return minHeap.isEmpty() ? Integer.MIN_VALUE : minHeap.peek(); // 返回堆顶,即第k大的数
}
}
```
这个方法的工作原理是首先将前k个最大的数添加到最小堆中,然后遍历剩余的数组,如果遇到比堆顶更大的数,就将堆顶的数弹出并替换为新的数,这样始终保证了堆里的是前k个最大数。最后堆顶的元素就是第k大的数。
阅读全文