1. 程式人生 > 實用技巧 >1588. 所有奇數長度子陣列的和

1588. 所有奇數長度子陣列的和

定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的 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
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

要求取最小值的複雜度是O(1),需要維護一個儲存最小值的棧,棧儲存到目前為止的最小值,所以隨著元素入棧形成非嚴格遞減序列,隨著普通棧的出棧來判斷存最小值棧的出棧。

程式碼:

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> s,ls;
    MinStack() {

    }
    
    void push(int x) {
        s.push(x);
        if(ls.empty() || ls.top() >= x) ls.push(x);
    }
    
    
void pop() { if(!s.empty()) { if(s.top() == ls.top()) ls.pop(); s.pop(); }; } int top() { return s.top(); } int min() { return ls.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();
*/