MinHeap基本性质
最小堆中的最小元素值出现在根结点(堆顶);
堆中每个父节点的元素值都小于等于其孩子结点(如果存在)
MinHeap用途
1.求一个数列中的第K大的数,建立一个大小为K的最小堆,堆顶就是第K大的数
2.递归去除最顶元素,用于取top K等。
MinHeap可设置容量上限N带来两个好处:
内存占用可控
因为上限N的存在,可提高添加和删除元素的速度
以上述思想,接下来开始java编码:
我们要用inputs=[1, 2, 5, 12, 7, 17, 25, 19, 36, 99, 22, 28, 46, 92]中的14个元素来建立最小堆;输出top 为data
1.建堆
对于inputs中的每个元素调用add方法,建堆后是完全二叉树,并且所有父节点都比子节点小
public voidadd(T ele) {int size =data.size();if (size
data.add(ele);//堆底添加新元素
heapUp(size);//然后从末位置开始向上调整
} else{if (ele.compareTo(data.get(0)) > 0) {//如果大于堆顶元素则更新
data.set(0, ele); //替换顶元素
heapDown(0);//从上到下调整堆排序
}
}
}
2.向下调整代码
从堆顶某一