重造轮子-最小栈

目标:构建一个栈,以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;//最小值栈
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值