问题描述

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

求解思路

首先,考虑到最小元素和时间复杂度是O(1)O(1)O(1)的要求,应该想到找一个变量来存储最小元素。但是,这样做有一个缺陷,如果最小元素出栈了,就无法找到第二小的元素了。因此,想到使用一个辅助栈来解决该问题。辅助栈的作用可以看成一个游标,存储了数据栈一定区间范围内最小的元素。

可以这么理解,如果从栈底向栈顶的顺序看去,假设辅助栈不空的情况,那么辅助栈的的两个元素之间对应数据栈的元素,都应该大于辅助栈两个元素中的第一个。给出一个简单的实例,左侧是栈顶,右侧是栈底
AUX:A2A1A_{2} \ A_{1}A2​ A1​
Data: AnBmBm−1⋯B1A1A_{n} \ B_{m} \ B_{m-1}\cdots B_{1}\ A_{1}An​ Bm​ Bm−1​⋯B1​ A1​
那么,A1&lt;{B1,⋯&ThinSpace;,Bm}A_{1}\lt \{B_{1},\cdots,B_{m}\}A1​<{B1​,⋯,Bm​},且An&lt;A1A_{n}\lt A_{1}An​<A1​

或者Data的区间全是一段相等的元素:
AUX:A2A1A_{2} \ A_{1}A2​ A1​
Data:A2A1A_{2} \ A_{1}A2​ A1​

因此需要有下面的规则控制辅助栈:

  • 入栈操作:

    • 数据栈为空,那么数据栈和辅助栈都要加入第一个数据。
    • 数据栈不空,如果当前入栈的元素小于等于辅助栈的栈顶元素,则加入辅助栈
  • 出栈操作:
    • 如果数据栈栈顶的元素等于辅助栈顶的元素, 则辅助栈出栈
    • 否则不操作

AC代码

class Solution {public:void push(int value) {if(DataS.empty()) {AuxS.push(value);//  cout << "A push" << endl;} else if(AuxS.top() >= value) {   // 注意这里的等号AuxS.push(value);//  cout << "A push" << endl;}DataS.push(value);}void pop() {if(AuxS.top() == DataS.top()) {AuxS.pop();// cout << "A pop" << endl;}DataS.pop();}int top() {return DataS.top();}int min() {return AuxS.top();}stack<int>DataS;  // 数据栈stack<int>AuxS;   // 辅助栈
};

剑指Offer之包含min函数的栈相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  2. 【LeetCode】剑指 Offer 30. 包含min函数的栈

    [LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...

  3. 剑指 Offer 30. 包含min函数的栈 (python实现)

    剑指 Offer 30. 包含min函数的栈 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例 ...

  4. Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈

    Python描述 LeetCode 剑指 Offer 30. 包含min函数的栈   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术 ...

  5. 【简洁写法】剑指 Offer 30. 包含min函数的栈

    立志用最少的代码做最高效的表达 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.push 及 pop 的时间复杂度都是 O(1). 示例: MinSt ...

  6. 剑指offer——30.包含min函数的栈

    题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 知识点: 这种需要持续输出最小或最大的数的解决办法之一:引入辅助栈 注意: 无 代码实现 ...

  7. 剑指offer:包含min函数的栈 python实现

    题目 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 暴力做法: 遍历一遍,找最小的数,然后返回. # -*- coding ...

  8. 剑指OFFER之包含min函数的栈(九度OJ1522)

    题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(1<=n&l ...

  9. 剑指Offer 30.包含 min 函数的栈(Python)

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min.top.push 及 pop 的时间复杂度都是 O(1). # 例子: MinStack minSta ...

  10. 《剑指offer》包含min函数的栈

    题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 解析:直接利用java.util.Stack包里的Stack辅助实现该题目,需要注意的是在求min的时候,需要维护原始栈的 ...

最新文章

  1. 【译】Web Components简介
  2. 高效搭建Storm全然分布式集群
  3. 如何基于Weex实现创新交互体验?手淘开源技术BindingX案例解析
  4. android 调用系统播放器
  5. 多线程安全问题产生解决方案
  6. mongoDB如何将数据导成csv文件?
  7. The C Programming Language--可变参数的函数
  8. 查看mysql数据库的死锁日志_【MySQL】mysql死锁以及死锁日志分析
  9. easyui不同的jsp页面之间混乱_JSP+SSM+Mysql实现的图书馆预约占座管理系统
  10. Android6.0权限适配及兼容库的实现
  11. bin、hex、elf、axf文件的认识
  12. unity接入 微信登录sdk
  13. 北京亿阳信通Oracle笔试题
  14. java 微信高级群发_java微信平台,高级群发接口开发
  15. 程序之外:由电影《少年的你》揭露的bug
  16. php 即时通讯插件,四款可以整合到网站的网页版即时通信IM插件系统
  17. 不打开Excel文件读取工作表名(ADOX)
  18. 笔记本电脑触屏鼠标突然失灵怎么办?
  19. 下载微信支付平台证书及首次下载报错处理
  20. 计算机用户被停用,Win10电脑中Administrator账户被停用如何解决

热门文章

  1. 计算机算法设计与分析 矩阵连乘问题
  2. 解三对角线性方程组的追赶法
  3. Python之 while循环
  4. 实验4.2 实现客户机(CLIENT)类
  5. #CSP 201709-1 打酱油
  6. 目标检测——NMS算法的学习笔记~
  7. 【已解决】ffmpy3.FFExecutableNotFoundError: Executable ‘ffmpeg‘ not found
  8. 机器学习-代价函数(单变量线性回归)
  9. LeetCode 567. 字符串的排列 (滑动窗口哈希表)
  10. 集合 (二) ----- Map集合详解