网上教程看着很乱,自行利用小顶堆写了一个TopK问题来练练手,仅供参考。
/**
* TopK问题,利用小顶堆解决
*/
public class Test14 {
public static void main(String[] args) {
int[] arr = {9,6,8,7,0,1,10,4,2};
int k = 5;
int[] topK = new int[k];
// 把数组的前k个数存到一个新数组中
for (int i = 0; i < topK.length; i++) {
topK[i] = arr[i];
}
// 利用k长度的新数组建立一个MinHeap实例
MinHeap heapK = new MinHeap(topK);
// 调用小顶堆方法
heapK.minHeap();
// 如果N-K开始到N的数中有大于堆顶元素的就替换,没有就忽略
for(int i = k; i < arr.length; i++){
if(arr[i] > heapK.getRoot()){
heapK.setRoot(arr[i]);
}
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(topK));
}
}
class MinHeap{
private int[] data;
public MinHeap(){
}
public MinHeap(int[] data){
this.dat