PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目來源
題目分析
來源:acwing
分析:
題意:將1~N壓棧,判斷給定序列是否是合法的出棧序列。
對于序列1~N中的每個值i,先將其壓入棧。然后對于它就有兩種處理方法:要么壓入下一個元素i+1(若存在),要么出棧。直到最后一個元素,如果棧內還有元素,則全部出棧。 這樣的序列就是合法的出棧序列。
對于每個序列,采用for循環,每次循環先壓入數字 i,然后查看待判斷序列a[N]的頭指針j指向的元素是否等于棧頂元素,如果相等,,該元素出棧并且指針j++;如果不相等,for循環繼續壓入下一元素。
ac代碼
#include<bits/stdc++.h> using namespace std;const int N = 1010; int m,n , k; int a[N];bool check(){stack<int> stk;for(int i = 1, j = 0; i<= n ; i++) {stk.push(i);if(stk.size() > m) return false; // 超過棧的容量while(stk.size() && stk.top() == a[j]){stk.pop();j++;}}return stk.empty(); }int main(){cin>> m >> n >> k;while(k--){for(int i = 0; i < n; i++) scanf("%d",&a[i]);if(check()) cout<<"YES"<<endl;else cout<<"NO"<<endl;}}題目來源
PAT甲級1051 Pop Sequence
https://www.acwing.com/problem/content/1537/
總結
以上是生活随笔為你收集整理的PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1085 Perfect Se
- 下一篇: PAT甲级1055 The World‘