Java 实现
一般使用默认的优先队列。可供选择:BinaryHeap
大顶堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>( (o1, o2) -> o2 - o1);
小顶堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>();
原理
插入
把新增元素放到队尾。数组长度++。队尾元素向上移动
删除
用队尾元素代替堆顶元素。数组长度--。堆顶元素向下移动
常用方法
peek() 返回堆顶元素
poll () 返回堆顶元素。并删除当前堆顶元素,重排堆元素。
add(e) 同offer(e)
offer(e) 把 元素加到堆里面
解决过的问题:
最小K个数
滑动窗口最大值