C++版 - 剑指offer 面试题22:栈的压入、弹出序列 题解
剑指offer 面试题22:栈的压入、弹出序列
参与人数:3413 时间限制:1秒 空间限制:32768K
本题知识点:栈
分析:
当无法解决抽象问题时,应该给出正面和反面的实例来分析问题,发现规律。
要判断一个输入序列按照顺序压栈出栈,能否得到一个给定的输出序列?
那么我们需要一个辅助栈,来按照给定输出序列的顺序,将输入序列顺序入栈。
例如:
◆当1,2,3,4,5是某栈的压入顺序时,判断4,5,3,2,1 是否可能是其相应的弹出序列?
第一个希望弹出4,则4应该在栈顶,而压入4之前,1,2,3已经入栈。4出栈后,希望弹出5, 5不在栈顶,继续压入输入直至栈顶为5,弹出 5;希望弹出3,发现3在栈顶,弹出3;希望弹出2,1,发现都在栈顶。则该序列是一个弹出序列。
◆当1,2,3,4,5是某栈的压入顺序时,判断4,3,5,1,2 是否可能是其相应的弹出序列?
第一个希望弹出4,则4应该在栈顶,而压入4之前,1,2,3已经入栈。4出栈后,希望弹出3,发现3在栈顶,弹出 3;希望弹出5, 5不在栈顶,继续压入输入直至栈顶为5,弹出 5;希望弹出1,发现1不在栈顶,继续压入输入,发现已无输入。则该序列不是一个弹出序列。
总结如下:
判断一个 序列是否是一个栈的弹出序列的规律:
如果下一个希望弹出的数字刚好是栈顶数字,则直接弹出;如果下一个数字不在栈顶,我们把压栈序列中还没有入栈的数字压入栈,直至把下一个需要弹出的数字压入栈顶为止。如果所有数字已入栈,仍没有找到下一个要弹出的数字,那么该序列不是一个弹出序列。
<注>:上述解析参考了《剑指offer》2014纪念版
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
if(pushV.size() == 0 || popV.size() == 0)
return false; // 如果其中一个序列长度为0,则不合题意,返回false
stack<int> s;
int k=0;
for(int i=0;i<pushV.size();i++)
{
if(pushV[i] != popV[k])
{
s.push(pushV[i]); // 压栈,直至栈顶元素等于输出队列
}
else {
k++;
while (!s.empty() && s.top()==popV[k])
{
s.pop(); // 输出序列和栈顶一致,继续
k++;
}
}
}
if(k==popV.size()) return true; // 压完所有输入后,相等,判断结果为:是出栈序列
return false; // 仍不等,则判断结果为:不是出栈序列
}
};
// 以下为测试部分
/*
int main()
{
Solution sol;
int in[] = {1,2,3,4,5};
int a[] = {4,5,3,2,1};
int b[] = {4,3,5,1,2};
vector<int> invec(in,in+5);
vector<int> vec1(a,a+5);
vector<int> vec2(b,b+5);
//vector<int> invec(0);
//vector<int> vec1(0);
//vector<int> vec2(0);
cout<<"Is the sequence possible pop order ?: "<<sol.IsPopOrder(invec,vec1)<<endl;
cout<<"Is the sequence possible pop order ?: "<<sol.IsPopOrder(invec,vec2)<<endl;
return 0;
}
*/
C++版 - 剑指offer 面试题22:栈的压入、弹出序列 题解的更多相关文章
- 剑指Offer:面试题22——栈的压入,弹出序列(java实现)
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- 剑指 offer面试题22 栈的压入和弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 剑指offer-面试题22.栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...
- 剑指Offer - 九度1366 - 栈的压入、弹出序列
剑指Offer - 九度1366 - 栈的压入.弹出序列2014-02-05 20:41 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所 ...
- C++版 - 剑指offer 面试题31:连续子数组的最大和 题解
剑指offer:连续子数组的最大和 提交网址: http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=13&am ...
- 剑指offer(21)栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 剑指offer二十一之栈的压入、弹出序列
一.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 【剑指offer】栈的压入弹出序列,C++实现(举例)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...
- 【剑指Offer】21、栈的压入、弹出序列
题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2 ...
随机推荐
- centos7 安装freetype
1:下载: wget "http://download.savannah.gnu.org/releases/freetype/freetype-2.4.0.tar.bz2" 2: ...
- java基本类型的默认值
基本类型 默认值 取值范围 (最大/最小) 字节数 二进制位数 byte 0 127(2^7-1) -128(-2^7) 1byte 8bit short 0 32767(2^15 - 1) -327 ...
- 贪心-Wooden Sticks
先将火柴按照长度(或重量)优先排序,在不断遍历数组,找出其中重量(长度)递增子序列,并标记 Problem Description There is a pile of n wooden sticks ...
- s6-8 TCP 拥塞控制
TCP 拥塞控制 虽然网络层也试图管理拥塞,但是,大多数繁重的任务是由TCP来完成的,因为针对拥塞的真正解决方案是减慢数据率 分组守恒:当有一个老的分组离开之后才允许新的分组注入网络 TC ...
- Git使用(一、TortoiseGit和Gitlab在Windows下的项目库创建和上传)
介绍使用TortoiseGit初次创建并上传到gitlab项目库,转载请注明出处. 一.需要先安装git环境,并配置Git用户名及邮箱. 二.用PuTTYgen生成公约私钥对(鼠标画画).PuTTYg ...
- 【慕课网实战】九、以慕课网日志分析为例 进入大数据 Spark SQL 的世界
即席查询普通查询 Load Data1) RDD DataFrame/Dataset2) Local Cloud(HDFS/S3) 将数据加载成RDDval masterLog = sc.textFi ...
- 关于Eclipse导入项目jsp出现红色叉的解决办法
简单图解概括 右击项目 到这里就ok 如果没解决就检查下以下三个地方的版本是否一致 如果还不行,有什么疑问可以留言,我会及时帮助解决的
- H3C 路由策略(人为打环)
拓扑如上 任务1:去除环路双ospf 引入 造成路由环路一边是 1 一边是10关掉任意lo口都会生成新的路由表 但是路由表指向不对 变成了一个圆 我们可以采用引入路由打上tag ...
- 12Js_原型对象
对象描述: 1. 每个对象中都有一个_proto_属性. JS世界中没有类(模具)的概念,对象是从另一个对象(原型)衍生出来的,所以每个对象中会有一个_proto_属性指向它的原型对象.(参考左上角的 ...
- 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框)
[源码下载] 背水一战 Windows 10 (105) - 通知(Toast): 带按钮的 toast, 带输入的 toast(文本输入框,下拉选择框) 作者:webabcd 介绍背水一战 Wind ...