栈的压入、弹出序列

题目描述

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


思路

  1. 借用一个辅助的栈,将原数列依次压入辅助栈,栈顶元素与所给的出栈队列相比,如果相同则出栈;
  2. 如果不同则继续压栈,知道原数列中所有的数字压栈完毕;
  3. 检测辅助栈中是否为空, 若空,则该序列是压栈序列对应的一个弹出序列。否则,说明序列不是该栈的弹出序列。

举例

入栈:1,2,3,4,5

出栈:4,5,3,2,1

1) 1入辅助栈,此时1≠4;

2) 2入辅助栈,此时2≠4;

3) 3入辅助栈,此时3≠4;

4) 4入辅助栈,此时4=4,辅助栈出栈,剩下 1,2,3;同时,弹出序列向后一位,为5;此时3≠5,继续压栈;

5) 5入辅助栈,此时5=5,辅助栈出栈,剩下1,2,3;同时,弹出序列向后一位,为3;

6) 此时3=3,辅助栈出栈,剩下1,2;同时弹出序列向后一位,为2;

7) 此时2=2,辅助栈出栈,剩下1;同时弹出序列向后一位,为1;

8) 此时1=1,辅助栈出栈,为空,所以该序列是压栈序列对应的一个弹出序列。

实现代码

function IsPopOrder(pushV, popV)
{
if(pushV.length === 0 || popV.length === 0){
return;
}
var temp = [];
var popIndex = 0;
for(var i=0;i<pushV.length;i++){
temp.unshift(pushV[i]);
while(temp.length && temp[0] === popV[popIndex]){
temp.shift();
popIndex++;
}
}
return (temp.length === 0);
}
module.exports = {
IsPopOrder : IsPopOrder
};

《剑指offer》— JavaScript(21)栈的压入、弹出序列的更多相关文章

  1. 剑指offer-面试题22.栈的压入,弹出序列

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...

  2. 剑指offer - 栈的压入弹出序列 - JavaScript

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...

  3. 【剑指offer】栈的压入弹出序列,C++实现(举例)

    原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...

  4. 剑指Offer20 栈的压入弹出序列是否正确

    /************************************************************************* > File Name: 20_IsPopO ...

  5. 剑指 offer set 10 栈的压入、弹出序列

    总结 1. 通过按位对比来判断, 没有更优的方法了

  6. 剑指offer-栈的压入弹出序列21

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  7. 剑指offer 栈的压入弹出 顺序

    判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍 ...

  8. 剑指offer-面试题31-栈的压入弹出序列-栈

    #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #i ...

  9. 剑指offer(21)栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...

  10. 剑指Offer 21. 栈的压入、弹出序列 (栈)

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

随机推荐

  1. python dataframe 针对多列执行map操作

    Suppose I have a df which has columns of 'ID', 'col_1', 'col_2'. And I define a function : f = lambd ...

  2. bzoj1355——2016——3——15

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1355 题目大意: 1355: [Baltic2009]Radio Transmission ...

  3. Intent的概念及应用(二)

    ------siwuxie095 1.Intent过滤器 intent-filter 相关选项 如果多个Activity拥有同样的action,在启动时这个action时的情况: 首先在LearnIn ...

  4. 【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍

    使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2). 在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别) 下面介绍 ...

  5. c++ split()实现

    在c++中,没有java与python中定义的split()功能的函数,于是自己实现之. 情况1,适用范围,分隔符为字符.思路,记录分隔符的位置,判断需要截取的字符串的下标范围. vector< ...

  6. Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 及sql2008外围服务器

    转载:Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败 错误原因如下: Exception in thread & ...

  7. 分布式cookie-session的实现(spring-session)

    分布式cookie-session的实现(spring-session) 本文使用的spring-session版本为 1.0.0,地址为: https://github.com/spring-pro ...

  8. Eclipse 打开文件所在文件夹

    右击文件 > Show In > System Explorer

  9. Kingbase在初始化时遇到的错误

    FATAL: could not create semaphores: No space left on deviceDETAIL: Failed  system call was semget(58 ...

  10. SQL查询今天、昨天、7天内、30天

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0 昨天的所有数据:select * from 表名 where ...