小根堆/最小堆:每颗二叉树的节点都小于左右孩子节点
大根堆/最大堆:每颗二叉树的节点都大于左右孩子节点
Java对象的比较(三种)
1.equals() 比较两个对象相不相同
topK问题:
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
//求当前数组中k个最小的元素
public class TopK {
public static int[] topk(int[] array,int k){
//创建一个大小为k的大根堆
PriorityQueue<Integer> maxHeap=new PriorityQueue<>(k, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
//遍历数组中的元素,前k个元素放到队列当中
for (int i=0;i< array.length;i++){
if(maxHeap.size()<k){
maxHeap.offer(array[i]);
}else {
//从第k+1个元素开始,每个元素和堆顶元素比较
int top=maxHeap.peek();
if (top>array[i]){
//先弹出
maxHeap.poll();
//再存入
maxHeap.offer(array[i]);
}
}
}
int[] tmp=new int[k];
for (int i=0;i<k;i++){
tmp[i]=maxHeap.poll();
}
return tmp;
}
public static void main(String[] args) {
int[] array={18,21,8,13,30};
int[] tmp=topk(array,3);
System.out.println(Arrays.toString(tmp));
}
}