1588. 所有奇數長度子陣列的和
阿新 • • 發佈:2020-09-22
定義棧的資料結構,請在該型別中實現一個能夠得到棧的最小元素的 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();*/