【刷算法】栈的压入、弹出序列

简介: 【刷算法】栈的压入、弹出序列

题目描述


输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)


分析


其实该题就是考察一个进栈序列能否和一个出栈序列对应起来,但是棘手的地方在于:一个进栈序列可能会有多个出栈的顺序,所以还是得好好想一想。

可以从一个简单的例子开始:

序列A:1,2,3

序列B:2,3,1

1先进栈,B序列中未出栈的第一个数字是2,说明此时1不能再接着出栈;

2再进栈,B序列中未出栈 的第一个数字是2,说明第一个出栈的数字是2,那么2就此出栈;

此时栈顶元素为1,B序列中未出栈的第一个数字是1,说明1是自2出栈后的再一个出栈元素,那么1就此出栈,此时栈为空;

3继续进栈,此时B序列的中未出栈的第一个数字是3,说明3是再一个出栈元素,那么3就此出栈,此时栈为空,序列A也全都进栈完毕了;

栈空了,序列A也进栈完毕了,说明B就是A的弹出序列。


代码实现


接着这个思路,可以试着写代码了


function IsPopOrder(pushV, popV)
{
    if(pushV.length === 0 || popV.length === 0 || pushV.length !== popV.length)
        return false;
    // 进栈序列和出栈序列分别有一个指针,从头开始
    var curPushIndex = 0, curPopIndex = 0;
    var stack = [];
    for(;curPushIndex < pushV.length;curPushIndex++) {
        stack.push(pushV[curPushIndex]);
        while(curPopIndex < popV.length && stack[stack.length-1] === popV[curPopIndex]){
        // 栈顶元素和当前popIndex指向的数字一样的话,stack弹出栈顶元素,且当前popIndex指向pop序列的下一个数字
            stack.pop();
            curPopIndex++;
        }
    }
    // 栈中元素没有全部弹出,说明两个序列并不匹配,否则,就是匹配
    return stack.length === 0;
}
相关文章
|
17天前
|
存储 算法 索引
模拟算法题练习(二)(DNA序列修正、无尽的石头)
模拟算法题练习(二)(DNA序列修正、无尽的石头)
|
17天前
|
编解码 算法 定位技术
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
127 3
|
8天前
|
算法 C++
c++算法学习笔记 (15) 单调栈与单调队列
c++算法学习笔记 (15) 单调栈与单调队列
|
8天前
|
算法 C++
c++算法学习笔记 (14) 栈与队列
c++算法学习笔记 (14) 栈与队列
|
11天前
|
缓存 算法 C语言
数据结构与算法⑧(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
数据结构与算法⑧(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
6 0
|
17天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
16 0
数据结构与算法 栈与队列
|
17天前
|
机器学习/深度学习 人工智能 运维
人工智能平台PAI 操作报错合集之请问Alink的算法中的序列异常检测组件,是对数据进行分组后分别在每个组中执行异常检测,而不是将数据看作时序数据进行异常检测吧
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
17天前
|
算法 数据安全/隐私保护 数据格式
基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
该内容是一个关于混沌系统理论及其在图像加解密算法中的应用摘要。介绍了使用matlab2022a运行的算法,重点阐述了混沌系统的特性,如确定性、非线性、初值敏感性等,并以Logistic映射为例展示混沌序列生成。图像加解密流程包括预处理、混沌序列生成、数据混淆和扩散,以及密钥管理。提供了部分核心程序,涉及混沌序列用于图像像素的混淆和扩散过程,通过位操作实现加密。
|
17天前
|
编解码 算法 数据可视化
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
|
17天前
|
存储 缓存 算法
【算法与数据结构】栈的实现详解
【算法与数据结构】栈的实现详解