1051 Pop Sequence

前言

Pop Sequence


#include <iostream>
#include <stack>
#include <queue>
using namespace std;

stack<int> MyStack;
queue<int> MyQueue; // 1~N
queue<int> QueueIn; // 输入的序列

bool Solution( int M ) {
    int num1, num2;
    while( !QueueIn.empty() ) {
        num1 = QueueIn.front();
        QueueIn.pop();
        if( !MyQueue.empty() )
            num2 = MyQueue.front();
        while( num2 <= num1 && MyStack.size() < M && !MyQueue.empty() ) { // 注意确保栈大小不溢出的判断方法!
            MyStack.push( num2 );
            MyQueue.pop();
            if( !MyQueue.empty() )
                num2 = MyQueue.front();
        }
        if( MyStack.top() != num1 )
            return false;
        MyStack.pop();
    }
    return true;
}

int main() {
    int M, N, K, num; // M:栈的大小 N:输入的最大数 K:检测次数
    cin >> M >> N >> K;
    for( int i = 0; i < K; i++ ) {
        for( int i = 1; i <= N; i++ )
            MyQueue.push( i );
        
        for( int j = 0; j < N; j++ ) {
            cin >> num;
            QueueIn.push( num );
        }
        if( Solution( M ) )    cout << "YES" <<endl;
        else    cout << "NO" <<endl;
        
        while( !QueueIn.empty() )    QueueIn.pop();
        while( !MyStack.empty() )    MyStack.pop();
        while( !MyQueue.empty() )    MyQueue.pop();
    }
}

上一篇:判断语句和循环语句-2.2比较运算符


下一篇:Leetcode 415. 字符串相加