【剑斩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;
    }
};
相关推荐
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei1 天前
Visual Studio 配置C++opencv
c++·学习·visual studio
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
STL 栈 队列
开发语言·c++
2401_892070981 天前
【Linux C++ 日志系统实战】高性能文件写入 AppendFile 核心方法解析
linux·c++·日志系统·文件写对象
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
cccyi71 天前
【C++ 脚手架】etcd 的介绍与使用
c++·服务发现·etcd·服务注册