LeetCode热题100--155. 最小栈--中等

题目

设计一个支持 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.

题解

java 复制代码
class MinStack {
    private Stack<Integer> stack;
    private Stack<Integer> min_stack;
    public MinStack() {
        stack = new Stack<>();
        min_stack = new Stack<>();
    }
    public void push(int x) {
        stack.push(x);
        if(min_stack.isEmpty() || x <= min_stack.peek())
            min_stack.push(x);
    }
    public void pop() {
        if(stack.pop().equals(min_stack.peek()))
            min_stack.pop();
    }
    public int top() {
        return stack.peek();
    }
    public int getMin() {
        return min_stack.peek();
    }
}

解析

出自:最小栈 (辅助栈法,清晰图解)

java 复制代码
class MinStack  {
    private Stack<Integer> stack;      //定义一个名为stack的栈,用于保存所有的输入数字。
    private Stack<Integer> min_stack;   //定义另一个名为min_stack的栈,用于跟踪到目前为止遇到过的最小值。
    
    public MinStack() {         //构造方法,初始化两个栈。
        stack = new Stack<>();
        min_stack = new Stack<>();
    }  
      
    public void push(int x)  {            //push方法:将一个数字添加到数据结构中。如果这个数字小于或等于当前最小值,也将它压入min_stack栈。
        stack.push(x);
        if(min_stack.isEmpty() || x <= min_stack.peek())   
            min_stack.push(x);
     } 
      
    public void pop()   {         //pop方法:从数据结构中移除最近添加的数字。如果被删除的数字等于当前最小值,也要将min_stack栈顶元素也弹出。
        if(stack.pop().equals(min_stack.peek()))   
            min_stack.pop();        
     }  
      
    public int top()  {           //top方法:返回最近添加的数字,但不将其删除。它只是查找栈顶元素。
        return stack.peek();     
     }  
      
    public int getMin( )  {          //getMin方法:找到并返回目前为止遇到过的所有数字中的最小值。这个最小值始终在min_stack的栈顶位置,因此可以直接调用它的`peek()`函数来获取它。  
        return min_stack.peek();      
    } 
}     
相关推荐
清酒难咽4 小时前
算法案例之递归
c++·经验分享·算法
张柏慈4 小时前
Java性能优化:实战技巧与案例解析
java
天“码”行空4 小时前
简化Lambda——方法引用
java·开发语言
让我上个超影吧4 小时前
【力扣26&80】删除有序数组中的重复项
算法·leetcode
带刺的坐椅5 小时前
MCP 进化:让静态 Tool 进化为具备“上下文感知”的远程 Skills
java·ai·llm·agent·solon·mcp·tool-call·skills
java1234_小锋5 小时前
Java线程之间是如何通信的?
java·开发语言
张张努力变强5 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
沉默-_-5 小时前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
钱彬 (Qian Bin)5 小时前
项目实践19—全球证件智能识别系统(优化检索算法:从MobileNet转EfficientNet)
算法·全球证件识别
feifeigo1235 小时前
基于EM算法的混合Copula MATLAB实现
开发语言·算法·matlab