码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-01-01 16:08:47      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:个数   扩容   删除   有关   对象   申请   指南   实现   程序员   

题目】:

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

标签:个数   扩容   删除   有关   对象   申请   指南   实现   程序员   

原文地址:https://www.cnblogs.com/latup/p/10204873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!