A1051 Pop Sequence (25 分)

思路如下

/* 伪码 */

//入栈序列即 1, 2, 3, ..., N 那个序列
//出栈序列即输入的序列

for (遍历整个出栈序列) {
    while (stack.size() <= M) {
        if (栈空)    stack.push(从固定的入栈序列依次取走一个元素);

        if (stack.top() == 出栈序列当前元素) {
            stack.pop();
            break;
        } else {
            if (固定的入栈序列仍有元素 && stack.size() < M)
                stack.push(从固定的入栈序列依次取走一个元素);
            else    { cout << "NO\n"; 结束循环; }
        }
    }
    if (stack.size() == M)    { cout << "NO\n"; 结束循环; }//因为上面判断了 stack.size() < M 才入栈,也就是说栈最多 M 个元素
}
if (上面的 for() 能全部遍历完)    cout << "YES\n";

 

实际上打印完 "NO" 就可以结束循环了,我就懒得再写几个标记位来判断,所以完整代码我把上面的思路封装为函数了,这样每次 "NO" 我只要 retrun 就行了

 

点击获取完整代码

posted @ 2021-02-02 23:09  幼麟  阅读(37)  评论(0编辑  收藏  举报