LeetCode--代码详解 155.最小栈

155.最小栈

题目

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

实现 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
  • poptopgetMin 操作总是在 非空栈 上调用
  • push, pop, top, and getMin最多被调用 3 * 104

思路

用栈存储正常的值,再用一个栈从大到小存储最小值

代码

java 复制代码
class MinStack {

    private Stack<Integer> stack;
    private Stack<Integer> minStack;

    public MinStack() {
        this.stack = new Stack<>();
        this.minStack = new Stack<>();
    }

    public void push(int val) {
        stack.push(val);
        if (!minStack.isEmpty()) {
            int top = minStack.peek();
            if (top >= val) minStack.push(val);
        } else minStack.push(val);
    }

    public void pop() {
        int pop = stack.pop();
        int top = minStack.peek();
        if (pop == top) minStack.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minStack.peek();
    }    
}
相关推荐
RainbowSea5 分钟前
用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 01
java·spring boot·mysql
DoraBigHead5 分钟前
小哆啦解题记 · 射箭引爆气球,怎么射最省箭?
算法
超浪的晨11 分钟前
Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌
java·开发语言·后端·学习·个人开发
超浪的晨16 分钟前
Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合
java·开发语言·后端·学习·个人开发
AI_Keymaker17 分钟前
手术台上的AlphaGo:约翰霍普金斯大学发布自主手术机器人
算法·机器人
AI_Keymaker18 分钟前
人类早期驯服野生机器人珍贵影像(不是)
算法·机器人
liliangcsdn34 分钟前
mac mlx大模型框架的安装和使用
java·前端·人工智能·python·macos
今禾1 小时前
一行代码引发的血案:new Array(5) 到底发生了什么?
前端·javascript·算法
Shimiy1 小时前
第六章 面向对象编程------进阶
java
橙几1 小时前
击败了90%的解法?Two Sum 从 O(n²) 到 O(n) 的优化之路
算法