前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指offer 30:包含min函数的栈

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

作者头像
用户1148523
发布2020-02-13 09:50:14
3380
发布2020-02-13 09:50:14
举报
文章被收录于专栏:Fish

题意

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

思路

常规思路的问题:

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

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

  1. 当栈为空时,将一个值push进栈和辅助栈
  2. 第二个数来时,比较这个数和辅助栈中的数哪个大,如果这个数大,就继续push辅助栈中那个较小的数进入辅助栈,如果当前数小,就push这个小的数进入辅助栈。
  3. push的情况依次类推,在辅助栈中的数从顶往下必然是递增的。因此栈顶一定是最小的书,第二个就是次小,往下越来越大。
  4. pop时,把辅助栈的元素一起pop出来。也就是更新当栈顶元素进入栈造成的大小值的影响。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档