leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)
题目
思路
左神讲过的经典算法,维护两个栈:
stack
,用来存储数据minStack
,用来存储每个位置情况下的最小值,类似于动态规划。
每次入栈2个元素,一个是入栈的元素本身,一个是当前栈元素的最小值。
直接上例子,一看就明白了。
输入:
["MinStack","push","push","push","push","getMin","pop","getMin","pop","getMin","pop","getMin"]
[[],[2],[0],[3],[0],[],[],[],[],[],[],[]]
预期结果:
[null,null,null,null,null,0,null,0,null,0,null,2]
过程详解:
push/pop 第 0 个元素之后:
stack: 2
minStack: 2 push/pop 第 1 个元素之后:
stack: 2 0
minStack: 2 0 push/pop 第 2 个元素之后:
stack: 2 0 3
minStack: 2 0 0 push/pop 第 3 个元素之后:
stack: 2 0 3 0
minStack: 2 0 0 0 push/pop 第 2 个元素之后:
stack: 2 0 3
minStack: 2 0 0 push/pop 第 1 个元素之后:
stack: 2 0
minStack: 2 0 push/pop 第 0 个元素之后:
stack: 2
minStack: 2
题解
class MinStack {int pos;int[] stack; // 普通栈int[] minStack; // 最小栈,存放当前位置最小值/*** initialize your data structure here.*/public MinStack() {stack = new int[10000];minStack = new int[10000];pos = -1;}public void push(int x) {pos++;stack[pos] = x;if (pos == 0)minStack[pos] = x;elseminStack[pos] = minStack[pos - 1] < x ? minStack[pos - 1] : x;print();}public void pop() {pos--;print();}public int top() {return stack[pos];}public int getMin() {return minStack[pos];}public void print() {System.out.println("\npush/pop 第 " + pos + " 个元素之后:");System.out.print("stack:\t\t");for (int i = 0; i <= pos; i++) {System.out.print(stack[i] + " ");}System.out.println();System.out.print("minStack:\t");for (int i = 0; i <= pos; i++) {System.out.print(minStack[i] + " ");}}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(x);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/
leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)相关推荐
- 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java
<LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...
- leetcode - 155. 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) – 将元素 x 推入栈中. pop() – 删除栈顶的元素. top() – 获取栈顶元素. get ...
- leetcode 155. 最小栈
难度:简单 频次:59 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化堆栈对象. void ...
- LeetCode:155. 最小栈
题目链接 155.最小栈 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. ...
- Leetcode 155. 最小栈 (每日一题 20210923)
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈.push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- 获取栈顶元素. ...
- C++实现双栈结构(一个顺序表中使用两个栈)
因为平常栈中push的数据不会太多,为了节约空间,所以可以在一个顺序表中使用两个栈 结构图: 在这里我会留一个空间用来判断栈是否满! #include <iostream> using n ...
- 面试题 03.04. 化栈为队/面试题09. 用两个栈实现队列/232. 用栈实现队列
2020-05-08 1.题目描述 用两个栈实现一个队列 2.题解 将一个栈用来进行入操作,另一个进行出操作,入栈直接入,出栈的时候如果是空的则把另一个 栈中的所有元素移动过来,再进行出栈,否则直接出 ...
- LeetCode 155.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化堆栈对象. void push(int val) 将元 ...
- 【LeetCode】剑指 Offer 09. 用两个栈实现队列
[LeetCode]剑指 Offer 09. 用两个栈实现队列 文章目录 [LeetCode]剑指 Offer 09. 用两个栈实现队列 一.双栈 总结 一.双栈 维护两个栈,第一个栈支持插入操作,第 ...
最新文章
- 探测参考信号(Sounding Reference Signal)
- hdu 3183 A Magic Lamp(给一个n位的数,从中删去m个数字,使得剩下的数字组成的数最小(顺序不能变),然后输出)...
- ​可扩展的公有云媒体服务设计解析
- SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析
- 【渝粤题库】国家开放大学2021春1359高级英语写作题目
- Atitit postgre sql json使用法 目录 1.1.1. 插入数据	1 2. json数据的常见操作	1 1.1.1.插入数据 插入数据可以直接以json格式插入: insert
- mfc 子窗体 按钮不触发_PIE二次开发在子窗体中选择主窗体中的文件
- 自制计算器(C语言的简单实现)(可多次使用)
- Wifi密码破解(rtl8818linux驱动安装)
- pdf editor android,MaxiPDF PDF editor builder
- 中国实验室玻璃器皿行业市场供需与战略研究报告
- 电脑桌面计算机打开不显示硬盘信息,Win10电脑下移动硬盘不显示盘符如何解决...
- CTO、技术总监、首席架构师的区别
- Win10禁止更新设备驱动的几种方式
- 转载:王垠 的《完全用Linux工作》
- 经典算法题型(二):二维数组(平面地图)的递归操作
- 全球主流云桌面传输协议
- 如何用MATLAB生成三维模型并导入PPT
- mysql against_Mysql 全文搜索 Match Against用法
- 计算机主板最新芯片组品牌,最新的主板芯片组排行榜【详解】
热门文章
- nexus 代理阿里云_Azure容器镜像代理服务失效
- 数据模型与决策_数据模型与决策复习资料拿走不用客气
- 安卓系统手机软件_2M不到的安卓神器!有了这五款软件,iphone用户都羡慕
- TIS教程01-安装
- 27计算机表演赛命题,27届计算机表演赛命题搜索赛答案(数学3)
- 在ubuntu中使用cookiecutter搭建django项目时命令迟迟没有反应
- BZOJ3209(n的二进制表示中1的个数的乘积)
- Anbox 和 LXC 代码规模
- LevelDB 源码剖析(一)准备工作:环境搭建、接口使用、常用优化
- 第48讲:分布式利器 Scrapy-Redis 原理