首页 > 其他分享 >leetcode-155. 最小栈

leetcode-155. 最小栈

时间:2022-10-12 22:59:38浏览次数:82  
标签:155 val 最小 Stack 最小值 mStack push stack leetcode

155. 最小栈

  • 首先关键是动态维护最小值,就是弹出元素为最小值的时候,如何知道次最小值

  • 可以使用一个辅助栈mStack,mStack只用于存储push路径上的所有曾经的最小值mStack的栈顶一直都是stack中的最小值

  • 当第一次push val,或者后续每次push的时候小于mStack,就向mStack里添加

  • 比较Integer需要用equal(),小心小于-128-127这个范围里的数字

 


class MinStack {

    /*
        关键是维护最小值,并且弹出栈顶元素最小值的时候,怎么知道次最小值。
     */
    private Stack<Integer> stack; //原栈
    private Stack<Integer> mStack; //最小栈,保存着那些曾经最小的值

    public MinStack() {
        this.stack = new Stack<>();
        this.mStack = new Stack<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if(mStack.isEmpty() || val <= mStack.peek()){//第一次添加val,把最小值存贮到mStack的栈顶,每次push数的时候小于mStack的栈顶则同时push到mStack
            mStack.push(val);
        }
    }
    
    public void pop() {
        if(stack.pop().equals(mStack.peek())){
            mStack.pop();
        }
    }
    
    public int top() {
        return stack.peek(); //返回原栈顶元素
    }
    
    public int getMin() {
        return mStack.peek(); //返回最小栈顶
    }
}

 

标签:155,val,最小,Stack,最小值,mStack,push,stack,leetcode
From: https://www.cnblogs.com/phonk/p/16786411.html

相关文章

  • 209. 长度最小的子数组
    209.长度最小的子数组给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组 [numsl,numsl+1,...,numsr-1......
  • [Leetcode Weekly Contest]314
    链接:LeetCode[Leetcode]2432.处理用时最长的那个任务的员工共有n位员工,每位员工都有一个从0到n-1的唯一id。给你一个二维整数数组logs,其中logs[i]=[idi......
  • leetcode-69-easy
    Sqrt(x)思路一:暴力publicintmySqrt(intx){longbegin=1L;while((begin*begin)<=x){begin++;}returnLong.valueOf(begin).i......
  • #yyds干货盘点# LeetCode 热题 HOT 100:子集
    题目:给你一个整数数组 nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。 示例1:输入:nums=[1,2,3......
  • 代码随想录算法训练营第一天 | 704. 二分查找 35.搜索插入位置 27. 移除元素 (LeetC
    704.二分查找题目链接使用条件:数组有序无重复元素写法:根据搜索区间边界是左闭右开还是左闭右闭分为两种写法:左闭右开区间右侧不包括在区间内,在写代码的时候......
  • Leetcode 844 -- 双指针&&O(1)时间复杂度
    题目描述比较含退格的字符串思路这里主要考虑O(1)空间复杂度的做法。一个字符是否会被删掉,只取决于该字符后面的退格符,而与该字符前面的退格符无关。因此当我们逆......
  • leetcode27.移除元素
    1.题目描述给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并......
  • 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素
    【算法训练营day1】LeetCode704.二分查找LeetCode27.移除元素LeetCode704.二分查找题目链接:704.二分查找初次尝试看到题目标题是二分查找,所以尝试使用二分查找的......
  • leetcode 219. Contains Duplicate II 存在重复元素 II(简单)
    一、题目大意给你一个整数数组nums和一个整数k,判断数组中是否存在两个不同的索引i和j,满足nums[i]==nums[j]且abs(i-j)<=k。如果存在,返回true;否则,返......
  • LeetCode 二叉树遍历算法题解 All In One
    LeetCode二叉树遍历算法题解AllInOne树的遍历/TreeTraversal主要看根节点Root的遍历顺序:前,中,后前序遍历(Root,Left,Right)先访问根节点,然后遍历左......