判斷出棧隊列的正確與否

告訴你一個入棧隊列和一個出棧隊列,當然這一個隊列裏邊不容許出現一樣的數,判斷這個出棧隊列是不是合理的出站隊列。。。

比如說告訴你一個入棧隊列,1 2 3 4 5 6,當然這個不一定是這樣單調遞增的,還告訴你一個出站隊列1 2 5 6 4 3,結果是yes,

但是如果告訴的入棧隊列是1 2 3 4 5 6,出站隊列是4 3 6 1 2 5那是不可能有這樣的出站隊列的,所以輸出no。

#include<iostream>
#include<stack>
#include<cstdio>
using namespace std;
bool solve(int a[],int b[],int n){
    //a數組是出棧隊列,b數組是入棧隊列,n是a和b的數組大小
    int ok=false;
    if(!n)return ok;
    int i=0,j=0;
    stack<int> s;
    while(j<n){
        while(i<n&&b[i]!=a[j]){
            s.push(b[i]);i++;
        }
        i++;j++;
        while(!s.empty()&&j<n){
            int top = 0;
            top=s.top();
            s.pop();
            if (top == a[j]) {
j++;
            } else {
                s.push(top);
break;
}
        }
        if(i>=n&&s.empty()){ok=true;return ok;}
    }
//    while(i<n){//豬似的這部分是隻適用於b數組(入棧隊列)是單調遞增的,這個是自己寫的!!!
//        while(j<n&&a[i]>b[j]){
//                s.push(b[j]);
//                j++;
//        }
//        if(a[i]>b[j])return false;
//        while(a[i]==b[j]&&j<n){i++;j++;}
//        if(j==n){
//                if(i<n)
//            {
//                while(!s.empty()){
//                int t=s.top();
//                if(t!=a[i++])return false;
//                s.pop();
//            }
//            return true;
//            }
//            else{
//                if(!s.empty())return false;
//                else return true;
//            }
//        }
//        if(a[i]<b[j])
//        {
//            if(!s.empty())
//            {
//                int t=s.top();
//            if(t!=a[i])return false;
//            s.pop();
//            i++;
//            }
//            else return false;
//        }
//    }
//    if(j<n)return false;
//    if(!s.empty())return false;
    return ok;
}
int a[1010],b[1010],n;
int main(){
while(~scanf("%d",&n))
{
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    for(int i=0;i<n;i++)b[i]=i+1;
    if(solve(a,b,n)) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
}
}


發佈了52 篇原創文章 · 獲贊 15 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章