IT公司100题-2-设计带min函数的stack

问题描述:
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
 
双倍空间实现:
保存2个栈,分别是元素和当前最小值。
 
压缩空间实现:

 1 // 2.cc
 2 #include <iostream>
 3 #include <stack>
 4 using namespace std;
 5 
 6 template <typename T> class MinStack {
 7 private:
 8       stack<T> stacks, mins;
 9 
10 public:
11       MinStack() {}
12       ~MinStack() {}
13 
14       void push(const T & x) {
15             stacks.push(x);
16             if (mins.empty() || x <= mins.top())
17                   mins.push(x);
18       }
19 
20       void pop() {
21             T x = stacks.top();
22             stacks.pop();
23             if (x == mins.top()) mins.pop();
24             return;
25       }
26 
27       T top() const{
28             return stacks.top();
29       }
30 
31       T get_min() {
32             return mins.top();
33       }
34 };
35 
36 int main() {
37       MinStack<int> s;
38       s.push(6);
39       s.push(7);
40       s.push(5);
41       s.push(9);
42       s.push(3);
43       cout << s.get_min() << endl;
44       s.pop();
45       s.pop();
46       s.pop();
47       cout << s.get_min() << endl;
48       return 0;
49 }

 

posted on 2014-07-27 17:12  醉清风JM  阅读(189)  评论(0编辑  收藏  举报

导航