问题描述

对栈增加一个获取最小值的方法(getMin),要求,
时间复杂度为O(1)。

错误的解决思路

  1. 定义一个minIndex,存储最小值的下标。
  2. 每次push的时候比较大小,
    如果小于最小值,则minIndex修改为当前下标,
    否则不修改。

这样貌似可以,但是发现一个严重的问题,
如果pop操作,把最小值出栈后,minIndex就无效了。

正确的解决思路

  1. 定义一个额外的栈minIndexStack,存储每次push和pop操作后的最小值下标。
  2. 每次push的时候比较大小,
    如果小于最小值,则同时push最小值的下标到minIndexStack中,
    否则将minIndexStack的栈顶元素重复push一次。
  3. 每次pop操作,原有栈和额外的栈都pop操作。
    这样用空间换时间的操作完成。

栈的最小值查找(O1)相关推荐

  1. 面试题 03.02. 栈的最小值/面试题30. 包含min函数的栈/155. 最小栈

    2020-05-10 1.题目描述 栈的最小值 2.题解 需要牺牲空间换时间,可以用vector来存储至当前元素的最小值,在push或者pop元素的时候需要更新. 3.代码 class MinStac ...

  2. 面试题 03.02. 栈的最小值

    面试题 03.02. 栈的最小值 思路:两个栈,一个存数据,一个存当前最小值 class MinStack { public:stack<int> s1;stack<int> ...

  3. 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值

    实现栈的push pop 操作,并可以输出栈的最小值 // SatckMin.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include ...

  4. 剑指offer 算法(栈和队列 查找和排序)

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解析:用栈来模拟队列.我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc, ...

  5. 每天一道LeetCode-----实现一个栈,提供一个接口用于返回栈中最小值

    Min Stack 原题链接Min Stack 实现一个栈,除了基本功能外需要提供一个接口用于返回栈中元素的最小值 基本功能使用std::stack就够了,如果每次需要最小值时都遍历栈中元素的话会很麻 ...

  6. 最小栈--辅助最小值栈的维护

    0x01.问题 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() - ...

  7. T0001.数据结构面试题---栈---获取最小值

    题目 实现一个特殊的栈,在实现栈基本功能的基础上,实现返回栈中最小元素的操作. 要求: 1.pop,push,getMin操作的时间复杂度为O(1) 2.可使用现成的栈结构 GitHub源码 GitH ...

  8. 算法图解:如何找出栈中的最小值?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 前面我们学习了很多关于栈的知识,比如<动图演示:手撸堆栈的两种实现方法!&g ...

  9. java栈最小值的实现,关于java:算法图解如何找出栈中的最小值

    后面咱们学习了很多对于栈的常识,比方<动图演示:手撸堆栈的两种实现办法!>和<JDK 居然是这样实现栈的?>,那么接下来咱们再来刷一些对于栈的经典面试题以坚固学过的常识. 咱们 ...

最新文章

  1. matlab rank函数报错,Matlab signrank函数(Wilcoxon signed rank test)中的矛盾结果[重复]
  2. abaqus推荐用哪一版本的_2020年双十一哪一款立式空调/柜式空调值得推荐?【立式空调推荐/柜式空调推荐】·精选...
  3. 微信小程序开发视频教程新鲜出炉
  4. Python内置数据结构--列表
  5. boost::noncopyable用法的测试程序
  6. linux加载内核后如何运行app,Android app启动过程
  7. switch类型模式
  8. Google AppEngine:任务队列API
  9. 函数式编程让你忘记设计模式
  10. p2p-如何拯救k8s镜像分发的阿喀琉斯之踵?
  11. ubuntu16.04使用sudo apt-get autoremove导致系统崩溃的解决办法
  12. 你真会用setTimeout吗?
  13. 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结
  14. linux中lsattr命令,在Linux中用chattr和lsattr命令管理文件和目录属性
  15. 如何解决长传CSDN图片问题
  16. OneNote2007简体中文便携版
  17. 50k热敏电阻温度对照表c语言,50K热敏电阻温度表..doc
  18. 模糊综合评价指标如何计算?四种模糊算子如何计算?
  19. 《如何学商学》及听课感想
  20. Android谷歌地图地理编码,使用谷歌地图api iOS反向地理编码

热门文章

  1. 蓝牙AirTag防丢器FindMy
  2. 安卓手机振动器Vibrator
  3. 统一用户认证和单点登录(SSO)解决方案
  4. 【UVM基础】`uvm_info (“TRACE“, $sformatf(“%m“), UVM_HIGH);
  5. 最值得收藏的java技术博客(Java篇)
  6. Android VideoView在父窗体居中
  7. Visual Studio程序员箴言(奋斗的小鸟)_PDF 电子书
  8. C#多线程之 线程池 ThreadPool介绍
  9. 7_1整数四则运算c语言,用C语言实现 多位整数的四则运算,用栈,例如56*(12+20)-102/2...
  10. mongodb修改数据语句_MongoDB常用增删改查语句