leetcode 155 最小栈
很有意义的一个题目。其实本质是在一个类中维护了两个栈,其中一个是正常的,另外一个维护的是最小元素,与其说维护的是最小元素,不如说维护的是该元素对应的元素被压入栈中时,该最小栈中的最小元素。其巧妙之处在于,若弹出的元素非最小元素,则最小栈中弹出的元素也不是唯一的,下面肯定还有。而若弹出的元素为当前最小值,则该最小值在最小栈中也会被弹出,剩下的则是之前压栈这个动作完成后的最小值。很巧妙,值得纪念
1 class MinStack { 2 stack<int> x_stack; 3 stack<int> min_stack; 4 public: 5 MinStack() { 6 min_stack.push(INT_MAX); 7 } 8 9 void push(int x) { 10 x_stack.push(x); 11 min_stack.push(min(min_stack.top(), x)); 12 } 13 14 void pop() { 15 x_stack.pop(); 16 min_stack.pop(); 17 } 18 19 int top() { 20 return x_stack.top(); 21 } 22 23 int getMin() { 24 return min_stack.top(); 25 } 26 };

浙公网安备 33010602011771号