在baidu被问到这道题,算是一个设计题吧,面试时就这一个没答上来。回来后查了一下,发现原来很简单,郁闷~
转载自别人,记录一下:
问题描述:
对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。
解决方案:
在栈的每个元素加一个属性值 min (用于记录当前位置下面的元素的最小值),元素的值用key表示
压栈-Push:当压入的元素key小于当前栈顶元素的min值时,将新压入元素的min字段设置为新压入元素的key,否则,将新压入元素的min字段,设置为当前栈顶元素的min字段的值
(压入第一个元素时,直接设置当前 min <- key)
出栈-Pop:和以前一样删除就行
这样栈顶元素中的min字段,存储的就是栈中的最小值, 删除也不用额外的比较操作~
本文介绍了一种改进的栈数据结构设计方案,在不增加push()和pop()的时间复杂度的前提下,实现了O(1)时间复杂度获取栈中最小值的功能。通过在每个栈元素中增加一个min属性来记录当前位置以下的最小值。
634

被折叠的 条评论
为什么被折叠?



