题目要求很简单:给定一个大小为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