【剑斩OFFER】算法的暴力美学——leetCode 946 题:验证栈序列

一、题目描述

二、算法原理

思路:使用栈结构来模式出栈和入栈

以 pushed = [1,2,3,4,5],popped = [4,5,3,2,1] 为例。

运行流程如下:

压入 1 → 栈:[1],栈顶≠4(popped[0]),不弹栈。

压入 2 → 栈:[1,2],栈顶≠4,不弹栈。

压入 3 → 栈:[1,2,3],栈顶≠4,不弹栈。

压入 4 → 栈:[1,2,3,4],栈顶 = 4,执行弹栈→栈:[1,2,3],cur=1。

压入 5 → 栈:[1,2,3,5],栈顶 = 5(popped[1]),执行弹栈→栈:[1,2,3],cur=2。

此时 for 循环结束,进入 while 循环持续弹栈: 栈顶 = 3(popped[2])→ 弹栈,cur=3,栈:[1,2]。 栈顶 = 2(popped[3])→ 弹栈,cur=4,栈:[1]。 栈顶 = 1(popped[4])→ 弹栈,cur=5,栈:[]。

辅助栈为空,返回 true,序列合法。

三、代码实现

cpp 复制代码
class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        vector<int> stack;
        int cur = 0;
        for(auto& e : pushed)
        {
            stack.push_back(e);//入栈
            while(!stack.empty() && stack.back() == popped[cur])//判断栈顶元素是否和 poped 的一样
            {
                stack.pop_back();
                cur++;
            }
        }

        if(stack.empty()) return true;
        else return false;
    }
};
相关推荐
闻缺陷则喜何志丹2 小时前
【状态机动态规划】3686. 稳定子序列的数量|1969
c++·算法·动态规划·力扣·状态机动态规划
liulilittle2 小时前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
mjhcsp2 小时前
C++ AC 自动机:原理、实现与应用全解析
java·开发语言·c++·ac 自动机
寻星探路2 小时前
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
java·开发语言·人工智能·python·算法·ai·指针
wen__xvn2 小时前
力扣第 484 场周赛
算法·leetcode·职场和发展
YuTaoShao2 小时前
【LeetCode 每日一题】865. 具有所有最深节点的最小子树——(解法一)自顶向下
算法·leetcode·职场和发展
爱吃生蚝的于勒2 小时前
【Linux】进程间通信之匿名管道
linux·运维·服务器·c语言·数据结构·c++·vim
2301_800895102 小时前
hh的蓝桥杯每日一题--拔河
职场和发展·蓝桥杯
CCPC不拿奖不改名2 小时前
计算机网络:电脑访问网站的完整流程详解+面试习题
开发语言·python·学习·计算机网络·面试·职场和发展