leetcode-155 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) – 将元素 x 推入栈中。
- pop() – 删除栈顶的元素。
- top() – 获取栈顶元素。
- getMin() – 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
方法一:使用辅助栈
使用辅助栈来存储当前数据栈的最小元素,即插入元素时 同时维护数据栈和辅助栈,数据栈正常放入元素;辅助栈的栈顶则保存当前数据栈中最小的元素即可
实现如下:
class MinStack {public:/** initialize your data structure here. */MinStack() {}void push(int x) {data.push(x);//维护辅助栈//如果当前元素大小 小于辅助栈顶元素,则将当前元素放入辅助栈中if (min_stack.empty()) {min_stack.push(x);} else {if (x < min_stack.top()) {min_stack.push(x);} else {min_stack.push(min_stack.top());}}}void pop() {data.pop();min_stack.pop();}int top() {return data.top();}int getMin() {return min_stack.top();}
private:stack<int> min_stack;stack<int> data;
};
方法二:不用辅助栈
插入元素时同时,两个为一个单元,第二个为栈最小元素,第一个为要插入的元素
实现如下:
class MinStack {public:/** initialize your data structure here. */MinStack() {}void push(int x) {if(data.empty()){data.push(x);data.push(x);} else {if (x >= data.top()) {int tmp = data.top();data.push(x);data.push(tmp);} else {data.push(x);data.push(x);}}}void pop() {data.pop();data.pop();}//返回时需先保存栈顶的最小元素int top() {int tmp = data.top();data.pop();int result = data.top();data.push(tmp);return result;}int getMin() {return data.top();}
private:stack<int> data;
};
leetcode-155 最小栈相关推荐
- LeetCode:155. 最小栈
题目链接 155.最小栈 题目描述 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. ...
- leetcode 155. 最小栈
难度:简单 频次:59 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化堆栈对象. void ...
- leetcode 155. 最小栈(常数时间获取最小值,需要维护两个栈)
题目 思路 左神讲过的经典算法,维护两个栈: stack,用来存储数据 minStack,用来存储每个位置情况下的最小值,类似于动态规划. 每次入栈2个元素,一个是入栈的元素本身,一个是当前栈元素的最 ...
- LeetCode 155.最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化堆栈对象. void push(int val) 将元 ...
- leetcode - 155. 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) – 将元素 x 推入栈中. pop() – 删除栈顶的元素. top() – 获取栈顶元素. get ...
- Leetcode 155. 最小栈 (每日一题 20210923)
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈.push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- 获取栈顶元素. ...
- 【LeetCode】【HOT】155. 最小栈(辅助栈)
[LeetCode][HOT]155. 最小栈 文章目录 [LeetCode][HOT]155. 最小栈 package hot;import java.util.ArrayDeque; import ...
- leetcode系列-155.最小栈
leetcode系列–第155题.最小栈 题目描述: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化 ...
- 【LeetCode笔记】155. 最小栈(Java、栈)
文章目录 题目描述 思路 & 代码 更新版 题目描述 用空间换时间的经典例子,唯一要解决的地方就是 getMin() 如何实现常数检索 (貌似也是面试常考题) 思路 & 代码 既然想快 ...
- leetcode题目-最小栈和用两个栈实现队列
1.用两个栈实现队列 a栈用来存放加入的数 b栈用来存放要删除的数 当b栈存在数据时,就把top的元素pop掉 直到b栈中没有数据存放,再重新遍历a栈,把a的数据倒着遍历进b栈.也就是b栈存放着倒着的 ...
最新文章
- 为何每次用完 ThreadLocal 都要调用 remove()
- SQLServer学习笔记系列2
- IntelliJ IDEA不好用?那是因为没掌握这些技巧
- Hadoop2调优(一):如何控制job的map任务和reduce任务的数量
- k1658停运到什么时候_最近网传的春节快递停运时间表,是假的!
- java项目 js报错红叉,解决js红叉,java Resources红叉
- Ubuntu用户及用户组管理命令
- 60-100-024-使用-MySQL 表锁
- 量子计算机的系统论思考,量子计算机发展带来的思考..doc
- QTP基础教程(讲义)《软件测试技术》
- nvm在windows下的简单应用,CMD乱码,CMD的编码格式修改
- 对中文GB2312编码和解码
- 万字长文带来2021最稳C/C++学习路线
- 计算机中rom的意思是什么,ROM 是什么意思
- 区块链去中心化通俗的理解是什么?
- 树的直径,树的中心,树的重心
- 解决苹果手机按钮的圆角问题
- 基于Azure Kinect SDK获取物体rgb图、深度图、红外IR图和点云数据并保存到本地
- BI神器Power Query(2)-- PQ数据源
- 【大数据入门核心技术-Tez】(一)Tez介绍
热门文章
- golang:1.并发编程之互斥锁、读写锁详解
- Android 5.0新特性之沉浸式状态栏
- erlang的tcp服务器模板
- 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
- 石英晶体振荡器的结构
- php explore im,浏栏器器-explore.class.php_php
- mysql索引空间太大_MySQL优化索引
- oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项
- python 申请内存空间、用于创建多维数组_python 申请内存空间,用于创建多维数组的实例...
- python不用编译吗_windows编译xgboost-python,不用vs编译