题解 | 栈的压入、弹出序列

栈的压入、弹出序列

https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106

#include <stack>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param pushV int整型vector
     * @param popV int整型vector
     * @return bool布尔型
     */
    bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
        // write code here
        std::stack<int> stack;
        for (int i = 0, j = 0; i < pushV.size() || j < popV.size(); ) {
            if (pushV[i] != popV[j]) {
                if (stack.empty()) {
                    stack.push(pushV[i]);
                    i++;
                    continue;
                } else {
                    if (stack.top() != popV[j]) {
                        stack.push(pushV[i]);
                        i++;
                        continue;
                    } else {
                        stack.pop();
                        j++;
                        continue;
                    }
                }
            } else {
                i++;
                j++;
                continue;
            }
        }
        return stack.empty();
    }
};

我的思路是:

1.分别取两个下标代表进栈数组和出栈数组;

2.循环判断进栈数组和出栈数组对应下标的值是否相等:

1)不相等:

判断栈是否为空,

空则进栈,进栈数组下标递增;

非空则判断栈顶元素与出栈数组值是否相等:

a)不相等,则进栈,进栈数组下标递增;

b)相等,则出栈,出栈数组下标递增;

2)相等:

则进栈、出栈数组下标都递增(模拟进栈数组进栈又出栈,减少进栈出栈消耗)。

循环结束,返回栈是否为空即可。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务