剑指 Offer 31. 栈的压入、弹出序列(C++实现)

剑指 Offer 31. 栈的压入、弹出序列icon-default.png?t=N6B9https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/

通过一个来模拟真实情况:

  1. 通过双指针遍历入栈/出栈序列
  2. 所有元素 按照入栈序列一个个依次入栈
  3. 每执行一次入栈操作,就检查是否满足出栈条件,按照出栈序列执行出栈操作
  4. 若能成功执行,最后应为空,入栈/出栈序列双指针应指向末尾
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {

	// base case
	if (pushed.empty())
	{
		return true;
	}
	if (pushed.size() != popped.size())
	{
		return false;
	}

	int n = pushed.size();

	stack<int> s;		// 用一个栈模拟真实情况
	int i = 0, j = 0;	// 双指针记录 入栈、出栈序列的下标
	
	// 模拟所有元素入栈出栈的情况
	while (i != n)
	{
		// 先入栈
		s.push(pushed[i++]);

		// 再出栈
		while (!s.empty() && s.top() == popped[j])
		{
			s.pop();
			++j;
		}
	}

	// 只要最后所有入栈元素都能顺利出栈,即为true
	return s.empty();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值