leetcode 946 验证栈序列

一、题目描述

二、解题思路

整体思路

可以借助来模拟进、出栈过程。如果可以顺利完成整个过程,就说明这个序列是合法的,返回true,反之,就说明这个序列不是合法的,返回false。

具体思路

(1)声明栈st,i指向popped的当前位置,n初始化为popped的size;

(2)遍历pushed数组:

<1>首先,将x进栈;

<2>如果栈不为空且st.top()==popped[i],就执行出栈操作,并使得i++;

(3)如果popped数组可以遍历完,则代表这个序列是一个合法的序列,反之,就是一个不合法的序列,所以只要返回i==n就行;

三、代码实现

cpp 复制代码
class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        stack<int> st;
        int i=0,n=popped.size();
        for(auto x:pushed){
            st.push(x);
            while(st.size()&&st.top()==popped[i]){
                st.pop();
                i++;
            }
        }
        return i==n;
    }
};
相关推荐
And_Ii9 小时前
3740. 三个相等元素之间的最小距离 I
c++·算法
csuzhucong9 小时前
puzzle(0334)双面数局
数据结构·算法
强盛机器学习~9 小时前
2026年SCI一区新算法-贝塞尔曲线优化算法(BCO)-公式原理详解与性能测评 Matlab代码免费获取
算法·matlab·进化计算·智能优化算法·元启发式算法·群体智能算法
翟天保Steven9 小时前
空间载波移相干涉算法(SPSI)
算法·激光干涉·精密量测
xin_nai9 小时前
判断质数(Java版)
算法
biter down9 小时前
C++11 可变参数模板
开发语言·c++
YYYing.9 小时前
【Linux/C++网络篇(一) 】网络编程入门:一文搞懂 TCP/UDP 编程模型与 Socket 网络编程
linux·网络·c++·tcp/ip·ubuntu·udp
bkspiderx9 小时前
libwebsockets 详解:介绍、交叉编译与使用指南
c++·websocket·libwebsockets
W23035765739 小时前
经典算法详解:最大子数组和(暴力 / 分治 / 动态规划 / 线段树)
算法·动态规划·最大字段和
呼啦啦5619 小时前
leetcode练习——栈和队列
算法·leetcode·职场和发展