当前位置:网站首页>leetcode 155. Min Stack最小栈(中等)
leetcode 155. Min Stack最小栈(中等)
2022-08-08 16:03:00 【okokabcd】
一、题目大意
标签: 栈和队列
https://leetcode.cn/problems/min-stack
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() // 初始化堆栈对象。
void push(int val) // 将元素val推入堆栈。
void pop() // 删除堆栈顶部的元素。
int top() // 获取堆栈顶部的元素。
int getMin() // 获取堆栈中的最小元素。
示例 1:
输入:
[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]
[[],[-2],[0],[-3],[],[],[],[]]输出:
[null,null,null,null,-3,null,0,-2]解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
提示:
- -231 <= val <= 231 - 1
- pop、top 和 getMin 操作总是在 非空栈 上调用
- push, pop, top, and getMin最多被调用 3 * 104 次
二、解题思路
可以额外建立一个栈(最小值栈),栈顶表示原栈中最小值。插入一个数字时,如果该值小于新栈的栈顶值说明该数是最小值,将其同时插入原栈和最小值栈。取数时,如果原栈的值等于最小值栈的值,说明这个数是原栈中的最小值,原栈和最小值栈需要同时移除该元素。
实现:每次插入栈时,都向最小值栈插入一个原栈里所有值的最小值。
三、解题方法
3.1 Java实现
class MinStack {
Stack<Integer> s;
/** * 辅助栈 */
Stack<Integer> minS;
public MinStack() {
s = new Stack<>();
minS = new Stack<>();
}
public void push(int val) {
s.push(val);
// 注意这里是>=
if (minS.isEmpty() || minS.peek() >= val) {
minS.push(val);
}
}
public void pop() {
int val = s.pop();
if (!minS.isEmpty() && minS.peek() == val) {
minS.pop();
}
}
public int top() {
return s.peek();
}
public int getMin() {
return minS.isEmpty() ? 0 : minS.peek();
}
}
// Integer 与 int 比较
/** * 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(); */
四、总结小记
- 2022/8/8 这两天有大到暴雨,能凉快一些吧
边栏推荐
- Share these new Blender plugins that designers must not miss in 2022
- leetcode/delete the nth node from the bottom of the linked list
- MySQL数据库的简介及select语句的执行流程
- 大佬们,sqlserver-cdc任务报错这个,大家遇到过吗Caused by: org.apac
- 10.cuBLAS开发指南中文版--cuBLAS中的logger配置
- 《流浪方舟》首发重现,点我试玩
- 干货:从零设计高并发架构
- redis的详细介绍与操作命令
- Nuxt - 网站接入 51LA 网站统计(详细教程)
- 返回分页查询分类并统计多对多关系表中各分类下的应用数量
猜你喜欢
【kali-权限提升】(4.2.5)社会工程学工具包:PowerShell攻击向量(防报毒)
Streamsets Data Collector 3.12
groovy基础学习
(1)通过FlinkSQL将数据写入mysql demo
Redis哨兵的配置和原理
【MATLAB项目实战】基于Morlet小波变换的滚动轴承故障特征提取研究
论文解读(soft-mask GNN)《Soft-mask: Adaptive Substructure Extractions for Graph Neural Networks》
干货:从零设计高并发架构
华为云分布式缓存服务Redis开通及使用规划教程【华为云至简致远】
C#/VB.NET 将PDF转为PDF/X-1a:2001
随机推荐
国产数据库的红利还能“吃”多久?
C#/VB.NET convert PDF to PDF/X-1a:2001
【Unity入门计划】用双血条方法控制伤害区域减血速度
程序发生run time error原因及解决方案
Kubernetes-Basics-Common Commands
Thread local storage ThreadLocal
使用 PyGame 的冒泡排序可视化工具
GHOST工具访问数据库
Thoroughly understand the volatile keyword and application scenarios, and it is a must for interviews, and Xiaobai can understand it!
有了这个开源工具后,我五点就下班了!
文档管理系统:攻克这3个痛点,解决80%企业文档管理难题
瑞吉外卖学习笔记3
Superset 1.2.0 安装
FreeRTOS知识小结
Guanghong Technology: The company provides manufacturing services for Xiaomi, Samsung, OPPO, Nokia and other products in India
2020年适用于Linux的10个顶级开源缓存工具
PayPal无差别封号潮,被围剿的站群模式还能玩多久?如何避免shopify封店
redis的详细介绍与操作命令
在 Fedora 上使用 SSH 端口转发
快速排序(C语言版)