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();      
    } 
}     
相关推荐
AI视觉网奇1 小时前
标签拷贝 labelme json格式
算法·计算机视觉
SadSunset1 小时前
(3)第一个spring程序
java·后端·spring
高山上有一只小老虎1 小时前
小红的双生串
java·算法
某林2121 小时前
集成式人机交互与底层驱动系统设计说明书
人工智能·stm32·嵌入式硬件·算法·机器学习·人机交互
TDengine (老段)1 小时前
人力减 60%:时序数据库 TDengine 助力桂冠电力实现 AI 智能巡检
java·大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
民乐团扒谱机2 小时前
【微科普】GN 算法:在网络的脉络中,寻找社群的边界
开发语言·算法·matlab·语言学·语义网络分析
yaoxin5211232 小时前
263. Java 集合 - 遍历 List 时选用哪种方式?ArrayList vs LinkedList
java·开发语言·list
JH30732 小时前
Redisson vs Jedis vs Lettuce
java·redis