栈的压入、弹出序列

  1. 题目描述
    1. 解题思路

题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

解题思路

  • 按照出栈顺序模拟出栈,如果顺利完成出栈,则栈必为空,
  • 出站序列错误,则不为空
class Solution {
public:
    bool IsPopOrder(vector<int> pushV,vector<int> popV) {
        if (pushV.size() != popV.size()) {
            return false;
        } else {
            vector<int> stack1;
            for (int i = 0,j = 0;i < pushV.size();++i){
                // 入栈
                stack1.push_back(pushV[i]);
                // 判断是否可以出栈
                while(j < popV.size() && stack1.back() == popV[j]){
                    stack1.pop_back();
                    j++;
                }
            }
            return stack1.empty();
        }
    }
};

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

💰

Title:栈的压入、弹出序列

Count:252

Author:攀登

Created At:2019-12-26, 23:12:31

Updated At:2024-06-15, 15:53:35

Url:http://jiafeimao-gjf.github.io/2019/12/26/sword-%E6%A0%88%E7%9A%84%E5%8E%8B%E5%85%A5%E3%80%81%E5%BC%B9%E5%87%BA%E5%BA%8F%E5%88%97/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

×

Help us with donation