zoukankan      html  css  js  c++  java
  • 剑指 Offer 31. 栈的压入、弹出序列

    思路

    所有的元素一定是按顺序 push 进去的,重要的是怎么 pop 出来?

    假设当前栈顶元素值为 2,同时对应的 popped 序列中下一个要 pop 的值也为 2,那就必须立刻把这个值 pop 出来。因为之后的 push 都会让栈顶元素变成不同于 2 的其他值,这样再 pop 出来的数 popped 序列就不对应了。

    算法

    将 pushed 队列中的每个数都 push 到栈中,同时检查这个数是不是 popped 序列中下一个要 pop 的值,如果是就把它 pop 出来。

    最后,检查不是所有的该 pop 出来的值都是 pop 出来了。

    class Solution {
    public:
        bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
            stack<int> stk;
            int j = 0;
            for (int i = 0; i < pushed.size(); i++) {
                int x = pushed[i];
                stk.push(x);
                
                while(j < popped.size() && stk.size() && stk.top() == popped[j]) {
                    stk.pop();
                    j++;
                }
            }
            return j == popped.size();
        }
    };
    
  • 相关阅读:
    Virtualbox-CentOS网络配置
    使用phpmyadmin创建数据库
    Vue CLI的使用
    webpack3的使用
    Vue组件化之插槽
    Vue组件化开发
    Vue高级技巧
    Vue基础学习笔记
    Git解决冲突和diff用法
    Git常用命令举例
  • 原文地址:https://www.cnblogs.com/fxh0707/p/15049170.html
Copyright © 2011-2022 走看看