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();      
    } 
}     
相关推荐
2301_816651226 分钟前
C++中的享元模式变体
开发语言·c++·算法
逆境不可逃8 分钟前
LeetCode 热题 100 之 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
大傻^9 分钟前
Spring AI Alibaba ChatClient实战:流式输出与多轮对话管理
java·人工智能·后端·spring·springai·springaialibaba
m0_583203139 分钟前
C++中的访问者模式变体
开发语言·c++·算法
小帅学编程11 分钟前
英语学习笔记
java·笔记·学习
浅念-16 分钟前
C ++ 智能指针
c语言·开发语言·数据结构·c++·经验分享·笔记·算法
不染尘.17 分钟前
最小生成树算法
开发语言·数据结构·c++·算法·图论
学编程就要猛20 分钟前
JavaEE初阶:文件操作和IO
java·java-ee
ba_pi20 分钟前
每天写点什么2026-03-19-Doris三种存储模型
java·数据库·mysql
程序员老乔23 分钟前
Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(二):Valhalla落地,值类型如何让电商DTO内存占用暴跌
java·spring boot·c#