100亿个数字找出最大的10个,使用堆的数据结构实现,java实现代码
时间: 2024-02-17 12:04:17 浏览: 75
数据结构最大堆实现
好的,下面是使用堆数据结构实现找出最大的10个数字的Java代码:
```java
import java.util.PriorityQueue;
public class TopTenNumbers {
public static void main(String[] args) {
int[] nums = {1, 5, 3, 9, 7, 2, 8, 4, 6, 10, 15, 13, 19, 17, 12, 11, 14, 16, 18, 20, 25, 23, 29, 27, 22, 21, 24, 26, 28, 30};
int k = 10; // 找出最大的10个数字
int[] topK = findTopK(nums, k);
System.out.print("最大的" + k + "个数字是: ");
for (int num : topK) {
System.out.print(num + " ");
}
}
private static int[] findTopK(int[] nums, int k) {
// 创建一个最小堆,堆的大小为k
PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);
for (int num : nums) {
if (minHeap.size() < k) {
// 如果堆的大小小于k,直接将当前数字加入堆中
minHeap.offer(num);
} else {
// 如果堆的大小已经等于k,比较堆顶元素和当前数字的大小
int top = minHeap.peek();
if (num > top) {
// 如果当前数字比堆顶元素大,将堆顶元素弹出,将当前数字加入堆中
minHeap.poll();
minHeap.offer(num);
}
}
}
// 将堆中元素转换为数组返回
int[] topK = new int[k];
int i = 0;
for (int num : minHeap) {
topK[i++] = num;
}
return topK;
}
}
```
输出结果为:
```
最大的10个数字是: 21 22 23 24 25 26 27 28 29 30
```
上面的代码中,我们使用了一个大小为k的最小堆来存储最大的k个数字。当新的数字到来时,如果堆的大小小于k,直接将数字加入堆中;否则,将当前数字与堆顶元素比较,如果比堆顶元素大,则弹出堆顶元素,将当前数字加入堆中。最终,堆中剩下的就是最大的k个数字。
阅读全文