Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
Discuss
題意:寫一個新的棧:支持入棧,出棧,得到棧頂,和得到此時棧最小的那個數
思路:前三個操作都可以用一個棧來實現,求最小的話就需要一個新的單調棧來維護了,這個新的單調棧需要注意的地方是:當原始的棧pop掉一個數的時候可能會影響到這個單調棧,只要判斷此時pop掉的話,是不是單調棧的棧頂就能解決了,因為這個單調棧是原始棧的子集
class MinStack { public: void push(int x) { st.push(x); if (stm.empty() || stm.top() >= x) stm.push(x); } void pop() { int top = st.top(); st.pop(); if (top == stm.top()) stm.pop(); } int top() { return st.top(); } int getMin() { return stm.top(); } private: stackst; stack stm; };