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();      
    } 
}     
相关推荐
qiqsevenqiqiqiqi1 分钟前
字符串模板
算法
yaaakaaang3 分钟前
六、适配器模式
java·适配器模式
bobasyu10 分钟前
Claude Code 源码笔记 -- queryLoop
java·笔记·spring
Fcy64811 分钟前
算法基础详解(六)倍增思想与离散化思想
算法·快速幂·离散化·倍增算法
计算机学姐21 分钟前
基于SpringBoot的高校竞赛管理系统
java·spring boot·后端·spring·信息可视化·tomcat·mybatis
AnalogElectronic23 分钟前
普通数据源和druid数据源区别以及druid参数详解
java
wuweijianlove26 分钟前
算法调度问题中的代价模型与优化方法的技术5
算法
東雪木26 分钟前
Java学习——泛型基础:泛型的核心作用、泛型类 / 方法 / 接口的定义
java·学习·java面试
Dxy123931021630 分钟前
Python路径算法简介
开发语言·python·算法
一叶飘零_sweeeet31 分钟前
ConcurrentHashMap 深度解析:从 JDK7 到 JDK8 的演进与并发安全保障
java·并发编程