push, pop, min 都为O(1)的栈

来源:互联网 发布:最全短期网络理财投资 编辑:程序博客网 时间:2024/05/22 12:12
#include <iostream>#include <list>using namespace std;// O(1): push, pop, minclass MinStack{public:virtual void Push(int x) = 0;virtual int Pop() = 0;virtual int MinElement() = 0;};class MinStack_Impl1{public:virtual void Push(int x){data_stack.push_front(x);int currMin;if (min_stack.empty()){currMin = x;}else{currMin = min_stack.front();if (x < currMin){currMin = x;}}min_stack.push_back(currMin);}virtual int Pop(){int x = data_stack.front();data_stack.pop_front();min_stack.pop_front();return x;}virtual int Min(){int x = min_stack.front();data_stack.pop_front();min_stack.pop_front();return x;}private:list<int> data_stack;list<int> min_stack;};class MinStack_Impl2{public:virtual void Push(int x){stack.push_front(x);if (stack.empty()){stack.push_front(x); // min}else{int currMin = stack.front();if ( x < currMin ){currMin = x;}stack.push_front(currMin);}}virtual int Pop(){stack.pop_front(); // the minint x = stack.pop_front(); // the elemreturn x;}virtual int MinElement(){return stack.front();}private:list<int> stack;};

原创粉丝点击