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();      
    } 
}     
相关推荐
nbsaas-boot19 分钟前
多智能体系统的架构边界:任务编排、共享状态与故障隔离设计
人工智能·算法·动态规划
wuyk55535 分钟前
12.归并排序:分治思想的稳定排序算法
开发语言·数据结构·算法·排序算法
吴声子夜歌40 分钟前
ApacheCommons——commons-text(模板替换与文本算法)
java·开发语言·算法·apache
Haooog1 小时前
Agent 开发中的 Memory:State、短期记忆、长期记忆与 Memory Retrieval
java·agent·memory
砚底藏山河1 小时前
【量化纯GET实战 #23】多股票相关性:用收益率看板块联动
java·数据库·python·金融·数据分析
JiNan.YouQuan.Soft1 小时前
数值计算引擎:计算固体力学
人工智能·算法·机器学习
抠脚小弟1 小时前
Spring Cache 使用详解:从入门到实战
java·spring
和裕1 小时前
光伏储能定制加强型瓦楞纸箱:降低组件运输隐裂率与售后损耗的核心价值
大数据·运维·网络·人工智能·算法
ZGG0031 小时前
MySQL 索引详解:B+ 树、聚簇索引与最左前缀
java·数据库·mysql
萧瑟余晖2 小时前
Java深入解析篇五十四之对象模型详解
java·开发语言