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 };

 

posted @ 2021-09-29 20:33  zhaohhhh  阅读(32)  评论(0)    收藏  举报