设计栈,要求支持pop,push,top,以及返回栈中最小值的功能。
【思路】
首见题型。要用两个stack,其中一个保留最小值。
每次选择比minstack.top小的值push进去,这样就能保持top始终是最小值。
【other code】
class MinStack { private: stack<int> ostack; stack<int> minstack; public: void push(int x) { ostack.push(x); if(minstack.empty()|| ((!minstack.empty()) && x <= minstack.top())) minstack.push(x); } void pop() { if(!ostack.empty()){ if(minstack.top()==ostack.top()) minstack.pop(); ostack.pop(); } } int top() { if(!ostack.empty()){ return ostack.top(); } } int getMin() { if(!minstack.empty()){ return minstack.top(); } } };
【后记】
记住这个思路。