leetcode-最小栈

设计一个支持 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.

提示:

-231 <= val <= 231 - 1

pop、top 和 getMin 操作总是在 非空栈 上调用

push, pop, top, and getMin最多被调用 3 * 104 次

思路 :要求在常数时间内检索到最小元素。除了需要一个栈单独存储入栈数据外,还需要一个栈维护当前的最小值。
代码

c 复制代码
class MinStack {
    Stack<Integer> stack;
    Stack<Integer> minStack;

    public MinStack() {
        stack = new Stack<>();
        minStack = new Stack<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if(!minStack.isEmpty()){
            Integer minVal = minStack.peek();
            if(minVal>=val){
                minStack.push(val);
            }else{
                minStack.push(minVal);
            }
        }else{
            minStack.push(val);
        }

    }
    
    public void pop() {
        if(!stack.isEmpty()){
            stack.pop();
        }
        if(!minStack.isEmpty()){
            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();
 */
相关推荐
橘和柠17 分钟前
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
算法
Mem0rin29 分钟前
前缀和:中心下标与数组乘积
数据结构·算法
snow@li29 分钟前
SpringBoot:AOP日志切面全景梳理/原理+流程+实战+避坑
java·开发语言·spring boot
windliang29 分钟前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
ma_king34 分钟前
Spring Boot 接入飞书自定义机器人
java·后端
漂流瓶jz34 分钟前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
2401_8949155334 分钟前
部署 GEO 优化源码常见报错排查:端口、伪静态、缓存问题解决
java·运维·服务器·后端·缓存·开源
Forever Nore35 分钟前
LeetCode 6 Z 字形变换 - 按行模拟
算法·leetcode
七牛开发者1 小时前
Codex 实践系列 Vol.04:用 Goal 和 Plan 管住一个长任务
java·数据库·人工智能·github·copilot
我命由我123451 小时前
Android Drawable - gradient
android·java·java-ee·kotlin·android studio·android-studio·android runtime