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

Posted latup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9.24 设计一个没有扩容负担的堆结构相关的知识,希望对你有一定的参考价值。

题目】:

  堆结构一般是使用固定长度的数组结构来实现的。这样的实现虽然足够经典,但存在扩容的负担,比如不断向堆中增加元素,使得固定数组快耗尽时,就不得不申请一个更大的固定数组,然后把原来数组中的对象复制到新的数组里完成堆的扩容,所以,如果扩容时堆中的元素个数为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)

 

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

以上是关于9.24 设计一个没有扩容负担的堆结构的主要内容,如果未能解决你的问题,请参考以下文章

9.24考试总结

9.24-9.30博客精彩回顾

关于内存类型中的堆

上周热点回顾(9.24-9.30)

9.24 AHSOFNU 校内模拟

Python实现基于二叉树存储结构的堆排序算法示例