当前位置: 首页 > 工具软件 > Poptop > 使用案例 >

【最小栈c++】设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈

苏昊英
2023-12-01

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack

解题思路:
用两个栈来实现最小栈,一个用来进行基本的push、pop、top操作,称为数据栈;另一个栈用来存放数据栈里的最小元素,称为最小栈。
1、入栈
数据栈入栈所有元素,最小栈为空时入栈第一个元素,入最小栈的下一个元素必须小于当前最小栈的栈顶元素,否则不入最小栈。
2、出栈
数据栈元素出栈时势必会影响栈内最小元素的取值,所以当数据栈元素出栈时,当数据栈栈顶与最小栈栈顶相同时,最小栈中的元素也进行出栈操作。
3、求栈顶
即返回数据栈的栈顶元素即可
4、求栈内最小元素
在最小栈里取栈顶元素即可

#include <iostream>
#include <stack>
using namespace std;

class MinStack {
	stack<int> m_data;//数据栈
	stack<int> m_min;//最小栈
public:
//构造函数
	MinStack() {

	}
//入栈操作
	void push(int x) 
	{
		m_data.push(x);//将元素入栈到数据栈

		if (m_min.empty() || m_min.top() > x)
		{
			m_min.push(x);//当最小栈为空或者其栈顶元素大于x时让其入最小栈
		}
	}
//出栈操作
	void pop() 
	{
		if (m_data.top() == m_min.top())
		{
			m_min.pop();//两个栈栈顶元素相同时,最小栈执行出栈操作
		}

		m_data.pop();//数据栈出栈
	}
//求栈顶
	int top() 
	{
		return m_data.top();
	}
	//求栈里最小元素
	int getMin() {
		return m_min.top();//即最小栈的栈顶元素
	}
};

 类似资料: