• 【剑指Offer】面试题30. 包含min函数的栈


    题目

    定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

    示例:

    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.min();   --> 返回 -3.
    minStack.pop();
    minStack.top();   --> 返回 0.
    minStack.min();   --> 返回 -2.
    

    提示:

    • 各函数的调用总次数不超过 20000 次

    本题同【LeetCode】155. 最小栈

    思路

    把每次的最小值(之前最小值和新压入栈元素较小者)都保存在辅助栈中。辅助栈的栈顶元素永远保存当前最小值。

    • 如果新压入栈元素小于辅助栈栈顶元素,则将该元素压入辅助栈;
    • 否则,再次将栈顶元素压入辅助栈。

    代码

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

    另一种写法

    如果当前元素大于栈顶元素,则不压入(节省一定空间),而在上一种方法中则重复压入最小栈栈顶元素(节省弹出时间)。

    class MinStack {
        stack<int> st;
        stack<int> st_min;
    public:
        /** initialize your data structure here. */
        MinStack() {
    
        }
        
        void push(int x) {
            st.push(x);
            if (st_min.empty() || st_min.top() >= x) {
                st_min.push(x);
            }     
        }
        
        void pop() {
            if (st.top() == st_min.top()) st_min.pop();
            st.pop();     
        }
        
        int top() {
            return st.top();
        }
        
        int min() {
            return st_min.top();
        }
    };
    
  • 相关阅读:
    转 c#性能优化秘密
    转 the best for wcf client
    迁移到简书通知
    docker初体验
    PyQT 单词弹幕桌面生成!
    Python 常见排序查找算法-二分法,归并,冒泡,插入
    Python 将小姐姐画在Excel上
    TensorFlow基于神经网络实现井字棋
    TensorFlow(八) TensorFlow图像识别(KNN)
    TensorFlow(七) 地址匹配
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/12458871.html
Copyright © 2020-2023  润新知