题意:设计一个能输出栈内最小值的栈
该题设计两个栈,一个栈是正常的栈s,而另一个是存最小值的栈sm
在push时要判断sm是否为空,如果为空或者非空但是栈顶元素大于等于插入值的 需要在sm中插入x
同样地在pop时,s的元素被删除了,那么sm中的也应该被删除。
通过这些操作维护sm能很巧妙在O(1)复杂度得到最小值。
1 class MinStack { 2 public: 3 stack<int> sm; 4 stack<int> s; 5 void push(int x) { 6 s.push(x); 7 if(sm.empty() || (!sm.empty() && sm.top() >= x)) sm.push(x); 8 } 9 10 void pop() { 11 if(s.top() == sm.top()) sm.pop(); 12 s.pop(); 13 } 14 15 int top() { 16 return s.top(); 17 } 18 19 int getMin() { 20 return sm.top(); 21 } 22 };