1. 程式人生 > >演算法題:火車站

演算法題:火車站

在這裡插入圖片描述
思路很簡單,如果出棧的元素存在於入站的佇列中但是該元素不是棧頂元素,那麼該出棧佇列不可能存在。

#include <iostream>
using namespace std;
int main()
{
    int num;
    int n[100];
    cin>>num;
    for(int i=0;;i++){
        cin>>n[i];
        if(n[i]==0)break;
    }
    for(int i=0;i<num-1;i++)
    {//思路:出站的火車序列順序要滿足的要求是後面的車序號要麼大於上一個車,要麼比上一個車序號小1.
        if(n[i]-n[i+1]>1){cout<<"No";
        return 0;}
        }
    cout<<"Yes";
    return 0;
}

此外,還有棧的方法寫程式碼。

#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
const int MAXN = 1000 + 10;

int n, target[MAXN];

int main() {
while (scanf("%d", &n) == 1) {
        stack<int> s;
        int A = 1,B = 1;
        for (int i = 1; i <= n; i++)
            scanf("%d", &target[i]); //輸入的出棧順序 

        int ok = 1;
        while (B <= n) {
            if (A == target[B]) { A++; B++;}   //當入棧後又直接出棧的情況 
            else if (!s.empty() && s.top() == target[B]) { s.pop(); B++;} //當棧頂元素等於出棧順序元素 
            else if (A <= n) s.push(A++);     //入棧後沒有直接出棧   
            else { ok = 0; break; }
        }

        printf("%s\n", ok ? "YES" : "NO");
    }
    return 0;
    }