LeetCode 155. Min Stack

难点在于如果在调用getMin()时只花常数时间。

维护两个vector,v存push进来的数,minHist存最小的数,这个最小的数是指v中从头到对应位置里最小的数,比如minHist中位置为i的数,这个数是v中从0到i(均包含)的所有数中最小的数,举个例子,依次push进4、5、1,那么minHist里依次push进4、4、1,这样一来,v里每pop掉一个数,minHist也对应pop掉一个数,minHist.top()永远为v中最小数。

 1 class MinStack {
 2 public:
 3     void push(int x) {
 4         v.push_back(x);
 5         if(minHist.empty()) minHist.push_back(x);
 6         else minHist.push_back(min(minHist.back(), x));//!!!
 7     }
 8 
 9     void pop() {
10         v.pop_back();
11         minHist.pop_back();
12     }
13 
14     int top() {
15         return v[v.size() - 1];
16     }
17 
18     int getMin() {
19         return minHist.back();
20     }
21 private:
22     vector<int> v;
23     vector<int> minHist;
24 };

 

还有不用两个vector的算法,留坑。

https://leetcode.com/discuss/91887/why-two-stacks

posted @ 2016-04-04 20:05  co0oder  阅读(97)  评论(0编辑  收藏  举报