hot100-56最小栈

一、题目

实现最小栈类,栈+获取栈中最小元素。

push(int val)将元素val推入栈中,pop()删除栈中顶部的元素,

top()获取栈中顶部的元素,getMin()获取栈中最小元素。

二、思路

1、普通的栈可以实现push、pop、top,都是O(1),而找最小值要遍历整个栈,并且getMin()也要求O(1),所以不能临时计算,要利用一个主栈存储所有入栈的原始数据,同时维护一个最小值栈(栈顶始终是主栈中的最小值)。

2、push(val)时,如果 val 小于或等于 minStack 的栈顶(当前最小值),就把 val 也压入 minStack。

pop()时,如果弹出的元素等于 minStack 的栈顶,说明当前最小值被移除了,也要从 minStack弹出。

三、代码

复制代码
class MinStack {
    private Deque<Integer> stack;
    private Deque<Integer> minStack;
    public MinStack() {
        stack = new ArrayDeque<>();
        minStack = new ArrayDeque<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if(minStack.isEmpty() || val <= minStack.peek()){
            minStack.push(val);
        }
    }
    
    public void pop() {
        int top = stack.pop();
        if(top == minStack.peek()){
            minStack.pop();
        }
        
    }
    
    public int top() {
        return stack.peek();
        
    }
    
    public int getMin() {
        return minStack.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

四、语法记录一下

1)Deque<Integer> stack = new ArrayDeque<>();推荐

Deque双端队列,支持栈操作 push() pop() peek()

2)Stack<Integer> stack = new Stack<>();不推荐

3)入栈

stack.push(x)

4)出栈

stack.pop()

5)查看栈顶

stack.peek()

6)判断空

stack.isEmpty() 返回true/false

7)大小

stack.size() 返回元素个数

相关推荐
一条大祥脚7 分钟前
26杭电暑期第八场(后半)快读|快写|tarjan|路径DP|mex转化|扫描线|前缀和|二分图
数据结构·算法·tarjan·杭电多校·强联通分量·动态规划dp
Chester_19999 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
专注仿真14 小时前
Spring AI 实现智能对话系统项目指南
数据结构·spring·机器学习
间歇性努力持续性发呆的野生快乐选手14 小时前
高级数据结构:树状数组
数据结构
每周报刊19 小时前
竞速座舱级视界:爱攻 AGP497UCZD 超宽 QDOLED 显示器解析
数据结构·游戏·计算机外设
小星星闪亮登场21 小时前
图论--最小生成树(内含二分图)
数据结构·算法·图论·迭代加深·图搜索算法
2601_962201721 天前
Java进阶,集合,Colllection,常见数据结构
java·数据结构·windows
挽星安1 天前
2026/8/29
数据结构·算法
positive_zpc1 天前
进阶数据结构图——最短路径(二)
数据结构·算法·图论·最短路径
positive_zpc1 天前
进阶数据结构图——最小生成树(一)
数据结构·算法·图论