O(1)时间求出栈内元素最小值

问题描述:

对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。

 

解决方案:

在栈的每个元素加一个属性值 min (用于记录当前位置下面的元素的最小值),元素的值用key表示

压栈-Push:当压入的元素key小于当前栈顶元素的min值时,将新压入元素的min字段设置为新压入元素的key,否则,将新压入元素的min字段,设置为当前栈顶元素的min字段的值
(压入第一个元素时,直接设置当前 min -> key)


出栈-Pop:和以前一样删除就行

这样栈顶元素中的min字段,存储的就是栈中的最小值, 删除也不用额外的比较操作~

 

posted on 2012-10-21 10:26  小强斋太  阅读(343)  评论(0编辑  收藏  举报

导航