zoukankan      html  css  js  c++  java
  • 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.




    //章节 - 队列和栈    
    //三、栈:先入后出的数据结构
    //1.最小栈
    /*
    算法思想:
        只需一个内置栈,还需要一个整型变量min_val来记录当前最小值,初始化为整型最大值,然后如果需要进栈的数字小于等于当前最小值min_val,那么将min_val压入栈,并且将min_val更新为当前数字。在出栈操作时,先将栈顶元素移出栈,再判断该元素是否和min_val相等,相等的话我们将min_val更新为新栈顶元素,再将新栈顶元素移出栈即可。
    */
    //算法实现:
    class MinStack {
    public:
        /** initialize your data structure here. */
        MinStack() {
            min_val = INT_MAX;
        }
        
        void push(int x) {
            if (x <= min_val) {
                st.push(min_val);
                min_val = x;
            }
            st.push(x);
        }
        
        void pop() {
            int t = st.top(); 
            st.pop();
            if (t == min_val) {
                min_val = st.top(); 
                st.pop();
            }
        }
        
        int top() {
            return st.top();
        }
        
        int getMin() {
            return min_val;
        }
    private:
        int min_val;
        stack<int> st;  //使用内置栈
    };
    
    /**
     * 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();
     */
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061582.html
Copyright © 2011-2022 走看看