LCOF劍指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)
鏈接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
分析:
一個正常stack
一個輔助的stack,輔助的爲非正常降序排列
解答:

class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {}
    
    stack<int> normal_S;
    stack<int> min_S;
    void push(int x) {
        normal_S.push(x);
        if(min_S.empty()||min_S.top()>=x) min_S.push(x);
    }
    
    void pop() {
        if(!normal_S.empty()){
            
            if(normal_S.top()==min_S.top()) min_S.pop();
            normal_S.pop();
        }
    }
    
    int top() {
        return normal_S.top();
    }
    
    int min() {
        return min_S.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->min();
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章