【剑斩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;
    }
};
相关推荐
CSCN新手听安3 分钟前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
CSCN新手听安9 分钟前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
m0_736919109 分钟前
C++中的委托构造函数
开发语言·c++·算法
小小小小王王王15 分钟前
洛谷-P1886 【模板】单调队列 / 滑动窗口
c++·算法
网络安全-杰克23 分钟前
Jmeter压力测试工具安装与使用
自动化测试·软件测试·测试工具·jmeter·职场和发展
PPPPPaPeR.41 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
看我干嘛!1 小时前
python第五次作业
算法
历程里程碑1 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun1 小时前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
Pluchon1 小时前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法