【LeetCode-155】最小棧
阿新 • • 發佈:2021-08-07
問題
設計一個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。
- push(x) —— 將元素 x 推入棧中。
- pop()—— 刪除棧頂的元素。
- top()—— 獲取棧頂元素。
- getMin() —— 檢索棧中的最小元素。
解答1:輔助棧
class MinStack { public: void push(int val) { s.push(val); if (s_min.empty() || s_min.top() >= val) s_min.push(val); } void pop() { if (!s_min.empty() && s_min.top() == s.top()) s_min.pop(); s.pop(); } int top() { return s.top(); } int getMin() { return s_min.top(); } private: stack<int> s, s_min; };
重點思路
思路和【劍指Offer-59-II】佇列的最大值類似。
解答2:一個棧
class MinStack { public: void push(int val) { if (min >= val) { s.push(min); min = val; } s.push(val); } void pop() { if (s.top() == min) { s.pop(); min = s.top(); } s.pop(); } int top() { return s.top(); } int getMin() { return min; } private: stack<int> s; int min = INT_MAX; };
重點思路
實際上塞進棧裡的資料並沒有少,但就是少了一個棧。主要的思路是遇到最小值時額外push一份最小值。