PTA--Pop Sequence判定

该博客探讨如何判断一个给定长度为N的序列是否可以通过一个大小为M的栈操作得到,即通过进栈和出栈操作从1到N的原始数列形成此序列。以例子说明了合法和不合法序列的判断逻辑,并提供了基于栈模拟的代码实现,关键在于跟踪递增原始序列的数值并检查栈内元素情况以确定是否能进行pop操作。
摘要由CSDN通过智能技术生成

题目要求很简单:给定一个大小为M的栈,现在有一个长度是N的序列,判定这个序列是否可以通过这个栈得到。也就是一串1,2,3 ,4,5,…,N的原始数列,进栈或者出栈得到的序列。
比如N = 7,M = 5,现在给定一个序列: 1 2 3 4 5 6 7是否可得到呢?
答案是可以的:1进来,1出去;2进来,2出去;3进来,3出去…7进来,7出去,就可以得到一个1 2 3 4 5 6 7的序列。
如果给定的是3 2 1 7 5 6 4呢?
答案是不可以。因为第一个数字是3,那么肯定得等到1 2 3全部进来后,才能考虑把3 pop( )出去。然后继续pop( )2和1;这样3 2 1 可以得到。再继续看7,那么4 5 6 7要先进来,pop( )7以后,下一个只能pop( )6,而不是5,所以这个是不可以pop( )的序列。

具体到这个题目,还有一个数字K,表示K个序列,这不是重点,会判定一个序列是不是可以pop( )得到的才是核心。

代码如下:

#include <iostream>
#include <stack>
using namespace std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值