题目描述

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

解题思路

栈的压入与弹出,需明确的一点就是出入栈的顺序是反向执行的,不存在跳跃执行的过程,说直白一点就是,已知入栈的顺序,当出栈的时候,要么出栈元素位于栈顶,要么待出栈的元素还未入栈,不可能出现待出栈的元素还位于栈顶元素之下的情况。因此此题目的解题思路也即明确。

1.设置两个指示指针分别指向入栈序列和出栈序列,初始为0;

2.定义一个stack开始出入栈操作。

3.将出栈序列的当前元素与入栈序列当前元素比较,看是否相等,相等则一起出栈,若不相等,则入栈序列继续入栈,知道放入的元素与当前出栈元素相同,若所有元素入栈后仍不匹配,则此出栈序列非法。

4.循环执行3,直到出栈序列元素全部为空,此时说明出栈序列合法。

C++代码实现:

class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int size1=pushV.size();
int size2=popV.size();
bool flag=false;
if(size1==){
return true;
}
int posv=,popv=;
stack<int> tmp;
while(popv<size2){
while((tmp.empty() || tmp.top() != popV[popv]) && posv<size1){//当为空时需要填补。入栈队列
if(posv==size1){
break;
}
tmp.push(pushV[posv++]);
}
if(tmp.top()!=popV[popv]){ //检测当前出栈元素是否位于栈顶
break;
}else{
tmp.pop();
popv++;
}
}
if(tmp.empty()){
flag=true;
}
return flag;
}
};

剑指offer 22:验证栈的压入、弹出序列的更多相关文章

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

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

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

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

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

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.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. C++版 - 剑指offer 面试题22:栈的压入、弹出序列 题解

    剑指offer 面试题22:栈的压入.弹出序列 提交网址: http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId ...

随机推荐

  1. SpringBoot Restful Crud

    一个简单的Restful Crud实验 默认首页的访问设置: // 注册 自定义的mvc组件,所有的WebMvcConfigurer组件都会一起起作用 @Bean public WebMvcConfi ...

  2. Microsemi Libero系列教程(二)——新建点灯工程

    前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验, ...

  3. python3实现栈的逻辑

    python的队列中本身有很多方法 大家可以看下我的这篇博客,对python的队列的常用方法有简单的介绍 https://www.cnblogs.com/bainianminguo/p/7420685 ...

  4. [debug] 解决新建项目属性中没有 c\c++

    写一些代码(不写不行),然后生成,然后就可以看到这个选项了

  5. Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战

    Java生鲜电商平台-生鲜系统中微服务架构设计与分析实战 说明: Java生鲜系统中微服务的拆分应该如何架构设计与分析呢?以下是我的实战中的设计与经验分析. 目录 1. 微服务简介2. 当前现状3. ...

  6. 工厂模式-C#改良实现

    参考了下网上的工厂模式实现,总的来说例子还是OK得,但是示例太单一了,因此我做了下优化的改良实现. namespace DP { public interface ICreditCard { stri ...

  7. [转]Python十个高大上的语法

    Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...

  8. tomcat启停脚本

    脚本存放目录 /etc/init.d/ #!/bin/bash # description: Tomcat8 Start Stop Restart # processname: tomcat8 # c ...

  9. appium---模拟点击事件

    在做自动化的过程中都会遇到一些无法定位到的地方,或者通过元素怎么都定位不成功的地方,这个时候我们可以使用必杀技,通过坐标定位.具体的怎么操作呢? swipe点击事件 前面安静写过一篇关于swipe的滑 ...

  10. Security+学习笔记

    第二章 风险分析 风险管理 评估:确定并评估系统中存在的风险 分析:分析风险对系统产生的潜在影响 响应:规划如何响应风险的策略 缓解: 缓解风险对未来安全造成的不良影响 风险分析流程 资产确定 漏洞确 ...