重造轮子-最小栈

来源:互联网 发布:证大财富淘宝贷款骗局 编辑:程序博客网 时间:2024/05/18 05:28

目标:构建一个栈,以O(1)的时间复杂度返回栈内数据的最小值。

方法:用两个栈实现,一个存放原数据,一个存放最小值。对于原数据栈按普通的栈规则进行出栈入栈,对于最小值栈则按照

入栈规则

1、如果栈为空直接将当前的输入数入栈;

2、如果输入数小于等于最小值栈栈顶元素的值,那么将该输入数入栈;

出栈规则

1、如果原数据栈弹出的元素等于最小值栈顶的元素,那么最小值栈顶的元素也弹出;

2、如果不等,则不处理最小栈

(理由是最小栈中栈顶元素的意义是原数据栈当前的最小,因此原数据栈栈顶的元素值只可能小于等于最小栈栈顶元素值)

代码:

class Solution{public:void push(int num){source.push(num);if(minvalue.empty())minvalue.push(num);else if(num <= minvalue.top())minvalue.push(num);}void pop(){if(source.empty()){cout<<"Your stack is empty !!"<<endl;return;}if(source.top() == minvalue.top())minvalue.pop();source.pop();}int top(){if(source.empty()){cout<<"your stack is empty !!"<<endl;return -1;}return source.top();}int getMin(){if(minvalue.empty()){cout<<"You stack is empty !!"<<endl;return -1;}return minvalue.top();}private:stack<int> source;//原数据栈stack<int> minvalue;//最小值栈};


0 0
原创粉丝点击