堆(一颗完全二叉树):顺序存储结构,可用数组存储
- 大顶堆:每个父结点的值都大于其左右孩子的值
- 小顶堆:每个父结点的值都小于其左右孩子的值
数组中某个元素的父结点及其左右孩子索引:
- 父节点索引为i
- 左孩子索引:2*i+1
- 右孩子索引:2*i+2(左孩子索引+1)
- 孩子索引为j
- 父节点索引:(j-1)/2
- 最后一个非叶子结点索引:数组长度/2-1
1 | /** |
java 优先队列:PriorityQueue
- 参数可指定比较规则,如:
- PriorityQueue< Integer > queue = new PriorityQueue();//默认小顶堆
- PriorityQueue< Integer > queue = new PriorityQueue((a,b)->b-a);//大顶堆
常用方法:
- add(E e):将指定的元素添加到此队列中。
- remove():从此队列中删除并返回队头元素。如果队列为空,则抛出NoSuchElementException异常。
- element():返回队头元素但不删除它。如果队列为空,则抛出NoSuchElementException异常。
- peek():返回队头元素但不删除它。如果队列为空,则返回null。
- size():返回队列中的元素个数。
- isEmpty():如果队列为空,则返回true;否则返回false。
- clear():移除队列中的所有元素。
- toArray(T[] a):将队列中的元素复制到指定数组中。
- offer(E e):将指定的元素添加到此队列中。与add方法相同,但不会抛出IllegalStateException异常。
- poll():从此队列中删除并返回队头元素。如果队列为空,则返回null。
- remove(Object o):从此队列中删除第一次出现的指定元素(如果存在)。如果队列为空,则抛出NoSuchElementException异常。
- 本文作者: zzr
- 本文链接: http://zzruei.github.io/2023/10fe6957ee.html
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!