首页 > 其他分享 >[LeetCode Hot 100] LeetCode155. 最小栈

[LeetCode Hot 100] LeetCode155. 最小栈

时间:2023-12-10 11:55:24浏览次数:35  
标签:LeetCode155 val min int public Hot new 100 stack

题目描述

思路一:使用辅助栈

  • 定义一个[数据栈]来支持push、pop、top操作
  • 定义一个[辅助栈],其栈顶为当前的最小值,以支持常数时间复杂度的getMin操作

思路二:使用ArrayDeque

  • 栈元素中除了保存当前值之外,额外保存当前最小值
  • 使用静态内部类

方法一:对应思路一

class MinStack {
    private Deque<Integer> stack;
    // 用于记录栈中的最小值
    private Deque<Integer> minStack;

    public MinStack() {
        stack = new ArrayDeque<>();
        minStack = new ArrayDeque<>();
    }
    
    public void push(int val) {
        // 这里需要是<=号,即当为最小值是数据栈和辅助栈都需要push
        if (minStack.isEmpty() || val <= minStack.peek()) {
            minStack.push(val);
        }
        stack.push(val);
    }
    
    public void pop() {
        // 注意:stack.pop()和minStack.peek()都是Integer类型
        // 它们的比较不能用==,因为==用于包装类型的比较,比较的是它们的地址,需要用equals方法
        if (!minStack.isEmpty() && !stack.isEmpty() && stack.pop().equals(minStack.peek())) {
            minStack.pop();
        }
    }
    
    public int top() {
        if (!stack.isEmpty()) {
            return stack.peek();
        }
		// 如果报错,可以返回一个异常
        throw new RuntimeException("栈中元素为空,此操作非法");
    }
    
    public int getMin() {
        if (!minStack.isEmpty()) {
            return minStack.peek();
        }
        throw new RuntimeException("栈中元素为空,此操作非法");
    }
}

/**
 * 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();
 */

方法二:对应思路二

class MinStack {

    Deque<Node> stack;

    public MinStack() {
        stack = new ArrayDeque<>();
    }
    
    public void push(int val) {
        if (stack.isEmpty()) {
            stack.push(new Node(val, val));
        } else {
            stack.push(new Node(val, Math.min(stack.peek().min, val)));
        }
    }
    
    public void pop() {
        if (!stack.isEmpty()) {
            stack.pop();
        }
		throw new RuntimeException("栈中元素为空,此操作非法");
    }
    
    public int top() {
        if (!stack.isEmpty()) {
            return stack.peek().val;
        }
		// 如果报错,可以返回一个异常
        throw new RuntimeException("栈中元素为空,此操作非法");
    }
    
    public int getMin() {
        if (!stack.isEmpty()) {
            return stack.peek().min;
        }
		// 如果报错,可以返回一个异常
        throw new RuntimeException("栈中元素为空,此操作非法");
    }

	// 静态内部类
    private static class Node {
        int val;
        int min;
        public Node(int val, int min) {
            this.val = val;
            this.min = min;
        }
    }
}

/**
 * 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();
 */

标签:LeetCode155,val,min,int,public,Hot,new,100,stack
From: https://www.cnblogs.com/keyongkang/p/17892342.html

相关文章

  • 初中英语优秀范文100篇-022How to Protect Eyes -如何保护眼睛
    PDF格式公众号回复关键字:SHCZFW022记忆树1Nowadays,theeyesightofmanystudentsisgettingweaker,whichisworrying.翻译如今,许多学生的视力越来越弱,这令人担忧。简化记忆担忧句子结构这个句子是一个复合句,由两个分句组成,分别是"Nowadays,theeyesight......
  • [LeetCode Hot 100] LeetCode20. 有效的括号
    题目描述思路:栈的经典应用。注意下遇到右括号的代码,即边界情况://遇到右括号,则进行括号匹配if(!stack.isEmpty()&&stack.peek()==match(c)){ //如果匹配则直接弹出栈顶元素 stack.pop();}else{ //如果不匹配则直接返回false returnfalse;}方法一:class......
  • P1004-DP【绿】
    这道题很有趣,暴搜的时间复杂度太过于凶残O(K*(2^n)^2)(K的意思是大常数),不过作为提高组T4,这道题数据范围太小了,感觉哪怕是离谱的暴搜也能过。再加上一时半会没想好多项式时间复杂度的正解DP,就搞了一个四不像出来,第一次走用搜索来实现第二次走用记搜来实现,这样时间复杂度就是O((2^n)*......
  • 初中英语优秀范文100篇-021Sophia the Robot-机器人索菲亚
    PDF格式公众号回复关键字:SHCZFW021记忆树1WhenitcomestoAI,Sophiatherobotismentionedagainandagain.翻译说到人工智能,总是会反复提到机器人索菲亚。简化记忆反复句子结构句子结构分析:主句:Sophiatherobotismentionedagainandagain.主语:Sophia......
  • 磁盘占用率100%做过的更改
    https://zhuanlan.zhihu.com/p/353963603https://zhuanlan.zhihu.com/p/258751945https://zhuanlan.zhihu.com/p/417616802https://blog.csdn.net/qq_44720952/article/details/125039718https://zhuanlan.zhihu.com/p/107449941www.3gbizhi.comhttps://www.zhihu.com/q......
  • SBT30100VFCT-ASEMI肖特基二极管SBT30100VFCT
    编辑:llSBT30100VFCT-ASEMI肖特基二极管SBT30100VFCT型号:SBT30100VFCT品牌:ASEMI封装:TO-220F正向电流:30A反向电压:100V引线数量:3芯片个数:2芯片尺寸:94MIL漏电流:<10ua恢复时间:5ns浪涌电流:250A芯片材质:正向电压:0.40V~0.66V工作结温:-65℃~150℃包装方式:500/箱SBT30100VF......
  • MBR30100CT-ASEMI肖特基二极管MBR30100CT
    编辑:llMBR30100CT-ASEMI肖特基二极管MBR30100CT型号:MBR30100CT品牌:ASEMI封装:TO-220特性:插件、肖特基二极管正向电流:30A反向耐压:100V恢复时间:5ns引脚数量:3芯片个数:2正向压降:0.54V~0.92V芯片尺寸:122MIL浪涌电流:275A漏电流:10ua工作温度:-65℃~175℃包装方式:500/盘;5000......
  • 最强无缓存PCIe 4.0 SSD之一!长江存储致态TiPlus7100 4TB评测:满盘写入缓外2.3GB/s
    一、前言:长江存储首款自有品牌致态4TBSSD其实早在年初,就有不少搭载长江存储闪存颗粒的国产4TBSSD,不过长江存储的自有品牌致态,直到现在才推出这款致态TiPlus71004TB。当然有句话叫好货不怕晚,致态TiPlus71004TB是一款非常优秀的PCIe4.0SSD。致态TiPlus71004TB采用了长江......
  • 华秋喜获“2023深圳行业领袖企业100强”称号
    11月25日,由深圳市行业领袖企业发展促进会与深圳商报/读创共同主办的“2023深圳行业领袖企业100强”与“深圳未来行业领袖企业50强”颁奖典礼隆重举行。华秋以“电子产业一站式服务平台”的领先优势,荣获了“2023深圳行业领袖企业100强”的称号,再次证明了华秋在电子产业互联网赛道的......
  • MySQL服务器8核32G max_connections设置为10000的情况,springboot里面的Druid参数配置
    MySQL服务器8核32Gmax_connections设置为10000的情况,springboot里面的Druid参数配置多少合适啊,MySQL服务器8核32G,max_connections设置为10000,确实是相当大的一个配置啊。对于Druid的参数配置,得看你系统的具体情况。一般来说,你可以考虑以下几个参数:initialSize:连接池的初始大小,你......