LeetCode-探索-初级算法-设计问题-2. 最小栈(个人做题记录,不是习题讲解)

50 篇文章 0 订阅
50 篇文章 0 订阅
LeetCode-探索-初级算法-设计问题-2. 最小栈(个人做题记录,不是习题讲解)

LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/

  1. 最小栈
  • 语言:java

  • 思路:本来打算用1个ArrayList再存储排序后的堆栈之类的来实现快速获取最小值,但是后面想想好像很麻烦。看到网上有不错的文章,里面解法1感觉思路上比较好理解

    https://www.cnblogs.com/lightwindy/p/8512214.html

  • 代码(66ms):利用另外一个栈来存储最小值,存储条件即小于或等于当前值。一开始push的函数的if条件后半部分写成mins.peek()>x,导致如果出现入栈[0], [1], [0]后出栈[0]会使得mins为空,所以改成了>=.

    class MinStack {
    
        Stack<Integer> vals;
        Stack<Integer> mins;
        
        /** initialize your data structure here. */
        public MinStack() {
            vals = new Stack();
            mins = new Stack();
        }
        
        public void push(int x) {
            vals.push(x);
            if(mins.empty() || mins.peek() >= x)
                mins.push(x);
        }
        
        public void pop() {
            int min_peek = mins.peek();
            int vals_peek = vals.peek();
            if(vals_peek == min_peek)
                mins.pop();
            vals.pop();
        }
        
        public int top() {
            return vals.peek();
        }
        
        public int getMin() {
            return mins.peek();
        }
    }
    
    /**
     * Your MinStack object will be instantiated and called as such:
     * MinStack obj = new MinStack();
     * obj.push(x);
     * obj.pop();
     * int param_3 = obj.top();
     * int param_4 = obj.getMin();
     */
    
  • 参考代码(45ms):用数组代替stack,并且有在容量不足时扩容;其用另一个数组min来保存最小值,每个下标即在当前状态下(栈顶为top时)的栈中最小值(算是动态规划的方式吧,每个下标都存储从开头至今为止的当前状态最小值);

    class MinStack {
    
        /** initialize your data structure here. */
        private int[] s;
        private int[] min;
        private int top;
        public MinStack() {
            s = new int[10];
            min = new int[10];
            top = -1;
        }
        public void push(int x) {
            if (top == s.length - 1) {
                int[] temps = new int [s.length*2];
                int[] tempm = new int [s.length*2];
                for (int i = 0; i < s.length; i++){
                    temps[i] = s[i];
                    tempm[i] = min[i];
                }
                s = temps;
                min = tempm;
            }
            s[top+1] = x;
            if (top < 0) {
                min[top+1] = x;
            }
            else {
                min[top+1] = x < min[top] ? x : min[top];
            }
            top ++;
        }
    
        public void pop() {
            if (top >= 0){
                top--;
            }
        }
    
        public int top() {
            if (top >= 0){
                return s[top];
            }
            else {
                return -1;
            }
        }
    
        public int getMin() {
            return min[top];
        }
    }
    
    /**
     * Your MinStack object will be instantiated and called as such:
     * MinStack obj = new MinStack();
     * obj.push(x);
     * obj.pop();
     * int param_3 = obj.top();
     * int param_4 = obj.getMin();
     */
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值