剑指offer 30:包含min函数的栈

题意

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

思路

常规思路的问题:

  1. 如果每次push对栈排序,让整个栈保持有序状态,实际上已经破坏了栈这个结构,而且复杂度肯定不是O(1)
  2. 如果用一个变量记录最小值,当这个最小值被pop出去后,找不到次小值。当然你也可以找个变量存次小值,这样的问题是第三小的值你还得找个变量存,无穷尽也。

因此,提出使用一个辅助栈的方法:

  1. 当栈为空时,将一个值push进栈和辅助栈
  2. 第二个数来时,比较这个数和辅助栈中的数哪个大,如果这个数大,就继续push辅助栈中那个较小的数进入辅助栈,如果当前数小,就push这个小的数进入辅助栈。
  3. push的情况依次类推,在辅助栈中的数从顶往下必然是递增的。因此栈顶一定是最小的书,第二个就是次小,往下越来越大。
  4. pop时,把辅助栈的元素一起pop出来。也就是更新当栈顶元素进入栈造成的大小值的影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值