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

一、题目描述

二、算法原理

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

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

运行流程如下:

压入 1 → 栈:1,栈顶≠4(popped0),不弹栈。

压入 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(popped1),执行弹栈→栈:1,2,3,cur=2。

此时 for 循环结束,进入 while 循环持续弹栈: 栈顶 = 3(popped2)→ 弹栈,cur=3,栈:1,2。 栈顶 = 2(popped3)→ 弹栈,cur=4,栈:1。 栈顶 = 1(popped4)→ 弹栈,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;
    }
};
相关推荐
会编程的小孩7 小时前
C++ qt的安装
c++
企业数字化笔记9 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
?abc!10 小时前
(数组)581. 最短无序连续子数组
数据结构·算法·leetcode
小成2023032026513 小时前
C++~07补充
开发语言·c++
小郎君65813 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧13 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm13 小时前
40 二叉树的直径
c++·leetcode
Shimeri13 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
解决小子13 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
Evand J14 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波