标签:个数 扩容 删除 有关 对象 申请 指南 实现 程序员
【题目】:
堆结构一般是使用固定长度的数组结构来实现的。这样的实现虽然足够经典,但存在扩容的负担,比如不断向堆中增加元素,使得固定数组快耗尽时,就不得不申请一个更大的固定数组,然后把原来数组中的对象复制到新的数组里完成堆的扩容,所以,如果扩容时堆中的元素个数为N,那么扩容行为的时间复杂度为O(N)。请设计一种没有扩容负担的堆结构,即在任何时刻有关堆的操作时间复杂度都不超过O(logN)
【要求】:
1、没有扩容的负担
2、可以生成小根堆,也可以生成大根堆
3、包含getHead方法,返回当前堆顶的值
4、包含getSize方法,返回当前堆的大小
5、包含add(x)方法,即向堆中新加元素x,操作后依然是小根堆/大根堆
6、包含popHead方法,即删除并返回堆顶的值,操作后依然是小根堆/大根堆
7、如果堆中的节点个数为N,那么各个方法的时间复杂度为:
getHead : O(1)
getSize : O(1)
add : O(logN)
popHead : O(logN)
题目来源:左程云老师《程序员代码面试指南》
标签:个数 扩容 删除 有关 对象 申请 指南 实现 程序员
原文地址:https://www.cnblogs.com/latup/p/10204873.html