【剑斩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;
    }
};
相关推荐
手写码匠1 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
无限码力1 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly1 小时前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
吴可可1232 小时前
SolidWorks草图转三维DWG技巧
算法
凡人叶枫2 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
不想写代码的星星2 小时前
std::move 根本不移动,就像老婆饼里没有老婆
c++
redaijufeng2 小时前
C++雾中风景7:闭包
c++·算法·风景
小欣加油3 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
思麟呀3 小时前
C++11 核心特性(三):强类型枚举、static_assert 与 std::tuple
开发语言·c++
一拳一个呆瓜3 小时前
【STL】C++程序的启动与终止
c++·stl