9.24 设计一个没有扩容负担的堆结构

题目】:

  堆结构一般是使用固定长度的数组结构来实现的。这样的实现虽然足够经典,但存在扩容的负担,比如不断向堆中增加元素,使得固定数组快耗尽时,就不得不申请一个更大的固定数组,然后把原来数组中的对象复制到新的数组里完成堆的扩容,所以,如果扩容时堆中的元素个数为N,那么扩容行为的时间复杂度为O(N)。请设计一种没有扩容负担的堆结构,即在任何时刻有关堆的操作时间复杂度都不超过O(logN)

要求】:

  1、没有扩容的负担

  2、可以生成小根堆,也可以生成大根堆

  3、包含getHead方法,返回当前堆顶的值

  4、包含getSize方法,返回当前堆的大小

  5、包含add(x)方法,即向堆中新加元素x,操作后依然是小根堆/大根堆

  6、包含popHead方法,即删除并返回堆顶的值,操作后依然是小根堆/大根堆

  7、如果堆中的节点个数为N,那么各个方法的时间复杂度为:

扫描二维码关注公众号,回复: 4736031 查看本文章

    getHead : O(1)

    getSize : O(1)

    add : O(logN)

    popHead : O(logN)

题目来源:左程云老师《程序员代码面试指南》

猜你喜欢

转载自www.cnblogs.com/latup/p/10204873.html
今日推荐