问题描述:
定义栈的数据结构,要求添加一个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 }