zoukankan      html  css  js  c++  java
  • 【小白刷题之路Day29】leetcode155. 最小栈(优化很关键)

    • leetcode155. 最小栈
    设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
    
        push(x) -- 将元素 x 推入栈中。
        pop() -- 删除栈顶的元素。
        top() -- 获取栈顶元素。
        getMin() -- 检索栈中的最小元素。
    
    示例:
    
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin();   --> 返回 -3.
    minStack.pop();
    minStack.top();      --> 返回 0.
    minStack.getMin();   --> 返回 -2.
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/min-stack
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    第一次提交试用等容量的辅助栈来做,很容易想到:

    class MinStack {
    private:
        stack<int> s;
        stack<int> s_min;
    public:
        /** initialize your data structure here. */
        MinStack() {
        }
        
        void push(int x) {
            s.push(x);
            if (!s_min.empty()){
                s_min.push(min(s_min.top(), x));
            }
            else
                s_min.push(x);        
        }
        
        void pop() {
            s.pop();
            s_min.pop();
        }
        
        int top() {
            return s.top();
        }
        
        int getMin() {
            return s_min.top();
        }
    };

    接着查看别人的代码,发现可以优化辅助数组的容量,由于最小栈一些元素重复,当新元素大于最小栈栈顶元素时,新元素不入栈;pop时若弹出元素大于最小栈栈顶元素时,最小栈栈顶元素也不弹出,很好的优化思路。

    添加两个约束条件即可实现,也不难。我尝试优化掉重复元素进入最小栈的问题,想了一下觉得可以预计的成本范围内无法实现。

    class MinStack {
    private:
        stack<int> s;
        stack<int> s_min;
    public:
        /** initialize your data structure here. */
        MinStack() {
        }
        
        void push(int x) {
            s.push(x);
            if (s_min.empty() || x<=s_min.top())
                s_min.push(x);        
        }
        
        void pop() {
            if (s.top() == s_min.top())
                s_min.pop();
            s.pop();        
        }
        
        int top() {
            return s.top();
        }
        
        int getMin() {
            return s_min.top();
        }
    };
    • 总结
    • 本题属于栈的基本题
    • 本题的优化思路很棒,收获不小。
  • 相关阅读:
    Talk the Talk
    2.1 使用eclipse4.4 搭建 maven简单结构项目。
    [LeetCode] Best Time to Buy and Sell Stock
    hdu4605Magic Ball Game 树状数组
    phoenixframe自己主动化平台在Linux环境下运行用例的说明
    数据存储值归档Archive
    BZOJ 1040 ZJOI2008 骑士 树形DP
    HDOJ 5357 Easy Sequence DP
    Autodesk 招聘Revit二次开发咨询顾问,与Autodesk全球团队紧密合作,提高职业生涯的好机会
    Codeforces Round #263 (Div. 1) A B C
  • 原文地址:https://www.cnblogs.com/ACStrive/p/11603901.html
Copyright © 2011-2022 走看看