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

    题意

    给定栈的压栈序列,看第二个序列是否为栈的弹出序列

    思路

    • 也是模拟题,我们维护一个栈,手动模拟入栈过程,并且在「可能出栈的时候尽可能出栈」,也就是说在入栈的时候如果刚好发现入栈的元素等于对应要出栈的元素,我们就出栈,最后检查是否已经模拟出了栈的弹出序列
    • 以题目的例子来说,就是要pushed = [1,2,3,4,5], popped = [4,5,3,2,1],设置一个指针指向popped[0] = 4,在模拟入栈4的时候,出栈序列的第一个也是4,我们就将指针指向popped[1] = 5,循环检查「栈顶元素」和「出栈序列的对应元素」

    代码

    class Solution {
    public:
        bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
            vector<int> sk;
            int cur = 0;
            for(auto e: pushed) {
                sk.emplace_back(e);
                while(!sk.empty() && sk.back() == popped[cur]) {
                    cur++;
                    sk.pop_back();
                }
            }
            if(cur == popped.size()) {
                return true;
            }else {
                return false;
            }
            return false;
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    npropress进度条插件的使用
    让img图片像背景一样显示
    vue-cli3配置多页面入口
    7中漂亮的纯css字体
    速查手册
    推荐系统架构
    leetcode 172. 阶乘后的零
    C++ string和int互相转换
    特征分解
    线性代数基础
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14345137.html
Copyright © 2011-2022 走看看