难度:简单
频次:59

题目:

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。

解题思路: 用辅助栈||只用一个栈

用辅助栈注意:
  • 因为提示里的pop等操作都是在非空栈上调用,所以不用考虑太多
  • 初始化辅助栈后添加一个最大的整数
  • 然后只要原来的栈进一个,就判断值跟辅助栈顶的数哪个小,取小的直接再放辅助栈即可(这里不用把原来的腾出来)
  • 然后出去 就两个栈一起出去就行了,右边的栈就记录了最小值的取值历史
代码
class MinStack {public Stack<Integer> stack;public Stack<Integer> minstack;public MinStack() {stack=new Stack<Integer>();minstack=new Stack<Integer>();//最小栈先放入一个最大值,可以一开始不用判断minstack.push(Integer.MAX_VALUE);}public void push(int val) {stack.push(val);minstack.push(Math.min(minstack.peek(),val));}public void pop() {stack.pop();minstack.pop();}public int top() {return stack.peek();}public int getMin() {return minstack.peek();}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/
用一个栈思路还是还差不多,只不过存进去的是一个数组
代码
class MinStack {public Stack<int []> stack;public MinStack() {stack=new Stack<int []>();}public void push(int val) {if(!stack.isEmpty()){stack.push(new int[] {val,Math.min(val,stack.peek()[1])});}else{stack.push(new int[] {val,val});}}public void pop() {stack.pop();}public int top() {return stack.peek()[0];}public int getMin() {return stack.peek()[1];}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

leetcode 155. 最小栈相关推荐

  1. LeetCode:155. 最小栈

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

  2. leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)

    题目 思路 左神讲过的经典算法,维护两个栈: stack,用来存储数据 minStack,用来存储每个位置情况下的最小值,类似于动态规划. 每次入栈2个元素,一个是入栈的元素本身,一个是当前栈元素的最 ...

  3. LeetCode 155.最小栈

    设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化堆栈对象. void push(int val) 将元 ...

  4. leetcode - 155. 最小栈

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

  5. Leetcode 155. 最小栈 (每日一题 20210923)

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

  6. 【LeetCode】【HOT】155. 最小栈(辅助栈)

    [LeetCode][HOT]155. 最小栈 文章目录 [LeetCode][HOT]155. 最小栈 package hot;import java.util.ArrayDeque; import ...

  7. leetcode系列-155.最小栈

    leetcode系列–第155题.最小栈 题目描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化 ...

  8. 【LeetCode笔记】155. 最小栈(Java、栈)

    文章目录 题目描述 思路 & 代码 更新版 题目描述 用空间换时间的经典例子,唯一要解决的地方就是 getMin() 如何实现常数检索 (貌似也是面试常考题) 思路 & 代码 既然想快 ...

  9. leetcode题目-最小栈和用两个栈实现队列

    1.用两个栈实现队列 a栈用来存放加入的数 b栈用来存放要删除的数 当b栈存在数据时,就把top的元素pop掉 直到b栈中没有数据存放,再重新遍历a栈,把a的数据倒着遍历进b栈.也就是b栈存放着倒着的 ...

最新文章

  1. 远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术
  2. js调用天地图api
  3. ETSI GS MEC 014,UE 标识 API
  4. jenkins 自动化部署常用插件
  5. 查看oracle的service name
  6. 利用Multisim快速分析一个RC电路
  7. MySQL增强版命令行客户端连接工具(mycli)
  8. 简单搞一下 Oracle 存储过程测试!
  9. Exchange Server 2013 RTM发布
  10. 51单片机c语言编写计算器仿真,51单片机实现计算器 proteus仿真及其程序源码 带教程...
  11. 2010.11.18 关于向窗口发送消息
  12. 勤哲excel服务器2017试用
  13. .net反编译工具Reflector下载
  14. bp神经网络算法原理公式,bp神经网络算法推导
  15. 原来系统还能这么装!教你虚拟光驱Daemon重装win10
  16. 光纤交换机分为哪几种 光纤交换机连接图
  17. 学习了pr后的收获_pr学习心得(入门篇)
  18. 万能设配器代码 带加载更多
  19. 计算机公式加法A C,概率公式c怎么计算
  20. PHP+Mysql制作一个学生成绩查询模块

热门文章

  1. VMWare: eth0: error fetching interface information : device not found
  2. Python开发Day03
  3. Axis 实现的SOAP附件的传输
  4. Cs Tip13: 删除安装文件
  5. While executing gem ... (Errno::EACCES)
  6. Guava中针对集合的 filter和过滤功能
  7. Report_报表中Ref Cursor数据源的概念和用法(案例)
  8. OpenStack看到中国“钱”景
  9. .net安装部署中添加卸载程序简单方法
  10. 14个数据库的设计技巧 (来自Blogcn中我的窝)