【剑斩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;
    }
};
相关推荐
乐迪信息29 分钟前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
无名猿1 小时前
shared_ptr 完全指南:引用计数、控制块与开销
c++·性能优化·内存管理·标准库·现代c++
Sirens.1 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕2 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
tangguofeng2 小时前
不带头结点的链队操作集(不含InitFlag)(C语言版)
算法
xailorliu3 小时前
SLIC_超像素算法
c++·opencv·目标检测·机器学习·计算机视觉
苏打豆4 小时前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
蛋蛋的就会顺顺的4 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
老歌老听老掉牙4 小时前
麻花钻切屑形态演变的力学机制与临界条件分析
python·算法·钻头