【剑指Offer】面试题22:栈的压入,弹出序列
来源:互联网 发布:什么刻录软件最好用 编辑:程序博客网 时间:2024/06/08 04:28
一:题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
二:解题思路
解决这个问题,就根据题目模拟栈的入栈和出栈的过程
如入栈顺序1,2,3,4,5 出栈的顺序4,5,3,2,1
借助一个辅助栈,模拟入栈和出栈的过程
1,入栈,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,不同
2,入栈,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,不同
3,入栈,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,不同
4,入栈,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,相同
4出栈,出栈顺序当前元素为5,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,不同
5,入栈,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,相同
5出栈,出栈顺序当前元素为3,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,相同
3出栈,出栈顺序当前元素为2,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,相同
2出栈,出栈顺序当前元素为1,栈非空,判断栈顶元素是否与出栈顺序当前元素相同,相同
1出栈,出栈顺序当前元素为X,栈空
栈空同时与出栈顺序全部比较完成,返回true
综上:解决该问题需要一个辅助栈,按照第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从栈中弹出数字
三:代码实现
class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size()==0 && popV.size()==0) return true; if(pushV.size()!=popV.size()) return false; stack<int> data; int i;//pushV int j=0;//popV //按照压栈顺序,依次将元素压入栈中 for(i=0;i<pushV.size();i++){ data.push(pushV[i]); //如果栈顶元素与出栈序列元素相同,则出栈 while(!data.empty() && j<popV.size() && data.top()==popV[j]){ j++; data.pop(); } } if(data.empty() && j==popV.size()) return true; else return false; }};
- 栈的压入、弹出序列(剑指offer面试题)
- 剑指offer面试题 栈的压入、弹出序列
- 剑指offer面试题 22 栈的压入、弹出序列的匹配
- 剑指offer面试题22栈的压入弹出序列
- 【剑指offer】面试题22:栈的压入弹出序列
- [剑指offer]面试题22:栈的压入、弹出序列
- 剑指Offer:面试题22 栈的压入、弹出序列
- 剑指offer 面试题22 栈的压入弹出序列
- 《剑指Offer》面试题22:栈的压入,弹出序列
- 《剑指Offer》学习笔记--面试题22:栈的压入、弹出序列
- 剑指offer--面试题22:栈的压入、弹出序列--Java实现
- 【剑指Offer学习】【面试题22:栈的压入、弹出序列】
- 剑指Offer面试题22(Java版):栈的压入、弹出序列
- 剑指offer代码解析——面试题22栈的压入、弹出序列
- 剑指offer-面试题22:栈的压入、弹出序列
- 剑指offer 面试题22:栈的压入、弹出序列 题解
- 剑指offer之面试题22:栈的压入、弹出序列
- 剑指offer之面试题22栈的压入、弹出序列
- js中循环嵌套
- Easyui在行编辑
- SQL慢查询在Greenplum/Deepgreen中的定位方法
- python 实现简单的文本聚类
- EF中的事务处理的初步理解
- 【剑指Offer】面试题22:栈的压入,弹出序列
- .Net C# Txt文本文件操作
- H5开发:调用高德地图api实现H5定位功能
- sql中的drop truncate delete
- 如何判断页面是否加载完成
- war文件的解压方式
- css定位机制
- extern C配合__cplusplus实现CPP文件和C文件的函数互相调用
- Log4j配置文件无效