LeetCode155. 最小棧
阿新 • • 發佈:2020-07-31
要能夠在常數時間內檢索到棧內最小元素,我們可以額外開一個棧,這個額外的棧的棧頂元素存放目前棧內的最小元素,每次棧內壓入一個新元素,輔助棧也壓入一個元素,也就是把新元素和原棧頂元素比較,較小的那個就是新的最小元素,壓入輔助棧的棧頂;原棧彈出棧頂元素的時候,輔助棧也彈出棧頂元素,這樣,不管什麼時候,輔助棧的棧頂元素總是存放原棧當前的棧內最小元素。
題目說了,push、pop和getMin操作總是在非空棧上呼叫,所以不需要做特判。
不過,由於輔助棧每次壓入的元素都是新元素和原棧頂元素的最小值,這樣,當壓入第一個元素的時候,就是新元素和一個空棧頂進行比較,這是不行的,所以我們初始化在輔助棧minSt裡壓入一個INT_MAX,這樣輔助棧第一個元素就是原棧的第一個元素和INT_MAX之間的較小值(還是第一個元素),這樣就把邊界情況處理了。
程式碼如下:
class MinStack { public: /** initialize your data structure here. */ stack<int> st, minSt; MinStack() { minSt.push(INT_MAX); } void push(int x) { st.push(x); minSt.push(min(x, minSt.top())); } void pop() { st.pop(); minSt.pop(); } int top() { return st.top(); } int getMin() { return minSt.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->getMin(); */