设计一个支持 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 最小栈相关推荐

  1. LeetCode:155. 最小栈

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

  2. leetcode 155. 最小栈

    难度:简单 频次:59 题目: 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈. 实现 MinStack 类: MinStack() 初始化堆栈对象. void ...

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

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

  4. LeetCode 155.最小栈

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

  5. leetcode - 155. 最小栈

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

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

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

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

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

  8. leetcode系列-155.最小栈

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

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

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

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

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

最新文章

  1. 为何每次用完 ThreadLocal 都要调用 remove()
  2. SQLServer学习笔记系列2
  3. IntelliJ IDEA不好用?那是因为没掌握这些技巧
  4. Hadoop2调优(一):如何控制job的map任务和reduce任务的数量
  5. k1658停运到什么时候_最近网传的春节快递停运时间表,是假的!
  6. java项目 js报错红叉,解决js红叉,java Resources红叉
  7. Ubuntu用户及用户组管理命令
  8. 60-100-024-使用-MySQL 表锁
  9. 量子计算机的系统论思考,量子计算机发展带来的思考..doc
  10. QTP基础教程(讲义)《软件测试技术》
  11. nvm在windows下的简单应用,CMD乱码,CMD的编码格式修改
  12. 对中文GB2312编码和解码
  13. 万字长文带来2021最稳C/C++学习路线
  14. 计算机中rom的意思是什么,ROM 是什么意思
  15. 区块链去中心化通俗的理解是什么?
  16. 树的直径,树的中心,树的重心
  17. 解决苹果手机按钮的圆角问题
  18. 基于Azure Kinect SDK获取物体rgb图、深度图、红外IR图和点云数据并保存到本地
  19. BI神器Power Query(2)-- PQ数据源
  20. 【大数据入门核心技术-Tez】(一)Tez介绍

热门文章

  1. golang:1.并发编程之互斥锁、读写锁详解
  2. Android 5.0新特性之沉浸式状态栏
  3. erlang的tcp服务器模板
  4. 面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
  5. 石英晶体振荡器的结构
  6. php explore im,浏栏器器-explore.class.php_php
  7. mysql索引空间太大_MySQL优化索引
  8. oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项
  9. python 申请内存空间、用于创建多维数组_python 申请内存空间,用于创建多维数组的实例...
  10. python不用编译吗_windows编译xgboost-python,不用vs编译