验证栈序列
2026-04-17 16:19:00
发布于:浙江
22阅读
0回复
0点赞
题意非常的简单
让我们维护一个栈;
可以在每次入栈后让与输出匹配的数弹出;
有人问了一个simple的问题:这样的解法不是有两层循环吗?然而它的总复杂度是,因为每个人的进栈与出栈都只有一次,内层的每次循环从栈中弹出一个。
所以复杂度是
#include<bits/stdc++.h>
using namespace std;
int main()
{
int q;
cin>>q;
while(q--)
{
stack<int> s;
int n;
cin>>n;
int x[n+1],y[n+1],h=1;//h是出栈的顺序的头
for(int i=1;i<=n;i++)
cin>>x[i];
for(int i=1;i<=n;i++)
cin>>y[i];
for(int i=1;i<=n;i++)
{
s.push(x[i]);
while(!s.empty()&&s.top()==y[h])
{
h++;
s.pop();
}
}
if(s.empty())
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
这里空空如也







有帮助,赞一个