实现包含min函数的栈(C++版)

本文介绍了一种特殊栈的设计方案,该栈除了实现基本的栈功能外,还能够高效地返回栈中的最小元素。通过使用两个栈,分别用来保存数据和记录最小值,实现了所有操作的O(1)时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

实现一个特殊的栈,要求除了实现基本栈功能,还需要实现返回栈中最小元素的功能。


要求:

pop() push() top() min()等操作的时间复杂度均为O(1)。


思路:

考虑使用2个栈,一个用于保存待压入的数据,另一个栈专门用于保存最小值。

初始:2个栈都为空 将元素都压入进去。

之后:如果待压入的元素 <= 最小值栈的栈顶元素 那么同样需要将元素压进2个栈。

否则 只需要将元素压进数据栈。


贴代码:

        stack<int> numStack;		// 记录装入数据的栈
	stack<int> minStack;		// 记录最小值的栈
        void push(int value) 
	{
		// 如果minStack为空 将value压入进去
		if(minStack.empty())
		{
			minStack.push(value);
		}
		// 否则 需要比较 minStack的栈顶元素和value的大小
		else
		{
			// value <= 栈顶元素 需要将value压栈
			if(value <= minStack.top())
			{
				minStack.push(value);
			}
		}

		numStack.push(value);
	}
	void pop() 
	{
		if (numStack.empty())
		{
			return;
		}

		if (numStack.top() == minStack.top())
		{
			minStack.pop();
		}
		numStack.pop();
	}
	int top() 
	{
		if(!numStack.empty())
			return numStack.top();
	}
	int min() 
	{
		if(!minStack.empty())
			return minStack.top();
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值