【剑指offer 面试题22】栈的压入、弹出序列
思路:
不停地压栈,直到栈头元素与弹出序列的首元素相等则出栈,同时弹出序列后移;若不相等则一直保持压栈,直到压入所有元素后弹出序列仍不为空,则说明无法匹配。
C++:
#include <iostream>
#include <vector>
#include <stack>
using namespace std; bool IsPreOrder(vector<int>& pushVec, vector<int>& popVec)
{
if(pushVec.size() != && popVec.size() != )
{
vector<int>::iterator itPush = pushVec.begin();
vector<int>::iterator itPop = popVec.begin(); stack<int> _stack; while(itPop != popVec.end())
{
while(_stack.empty() || _stack.top() != *itPop)
{
if(itPush == pushVec.end())
break; cout<<"push: "<<*itPush<<endl;
_stack.push(*itPush);
itPush++;
} if(_stack.top() != *itPop)
break; cout<<"pop: "<<_stack.top()<<endl;
_stack.pop();
itPop++;
} if(_stack.empty() && itPop == popVec.end())
return true;
}
return false;
} int main()
{
int apush[] = {,,,,};
int apop1[] = {,,,,};
int apop2[] = {,,,,}; vector<int> vpush(apush, apush + );
vector<int> vpop1(apop1, apop1 + );
vector<int> vpop2(apop2, apop2 + );
cout<<"push: 1 2 3 4 5 pop: 4 5 3 2 1"<<endl;
cout<<"res = "<<IsPreOrder(vpush, vpop1)<<endl<<endl;
cout<<"push: 1 2 3 4 5 pop: 4 3 5 1 2"<<endl;
cout<<"res = "<<IsPreOrder(vpush, vpop2)<<endl;
}
测试结果:
push: 1 2 3 4 5 pop: 4 5 3 2 1
push: 1
push: 2
push: 3
push: 4
pop: 4
push: 5
pop: 5
pop: 3
pop: 2
pop: 1
res = 1
push: 1 2 3 4 5 pop: 4 3 5 1 2
push: 1
push: 2
push: 3
push: 4
pop: 4
pop: 3
push: 5
pop: 5
res = 0
【剑指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 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所 ...
- 剑指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 ...
- 剑指offer - 栈的压入弹出序列 - JavaScript
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...
- 剑指Offer20 栈的压入弹出序列是否正确
/************************************************************************* > File Name: 20_IsPopO ...
随机推荐
- C# 中的命名规则
需要注意: C# 区分大小写 ,若有int a 和 int A ,则a, 和 A是不同的 普通字段,属相,方法,类的命名规则: C#中推荐使用 camelCasing ,和 PascalCasing ...
- Pycharm中的实用功能(网上看到的,感觉还不错)
实时比较 PyCharm 对一个文件里你做的改动保持实时的跟踪,通过在编辑器的左侧栏显示一个蓝色的标记.这一点非常方便,我之前一直是在Eclipse里面用命令“Compare against HEAD ...
- java:IO-读写大文件
import java.io.*; class Test { public static void main(String args[]){ FileInputStream fin =null; Fi ...
- 39. Combination Sum
题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C ...
- android Json 使用
http://www.cnblogs.com/mybkn/archive/2012/05/18/2508306.html http://www.cnblogs.com/haippy/archive/2 ...
- HTML CSS3 手风琴菜单
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel= ...
- (3)TXT转为XML
<?xml version="1.0" encoding="utf-8"?> <bocb2e> <head /> <t ...
- [POJ1330]Nearest Common Ancestors(LCA, 离线tarjan)
题目链接:http://poj.org/problem?id=1330 题意就是求一组最近公共祖先,昨晚学了离线tarjan,今天来实现一下. 个人感觉tarjan算法是利用了dfs序和节点深度的关系 ...
- Kaleidoscope for mac
mac下的对比工具Kaleidoscope,是一款不错的对比工具,界面被广大用户所喜爱. window下使用beyond compare 3,具体设置步骤,请见:http://www.cnblogs. ...
- sublime安装插件
今天因为某些原因,把 sublime 卸载掉了,然后来安装的时候,发现 Package Control 无法安装了,或者安装好后运行 ctrl + shift + p,会报 错误,截图如下: 然后就 ...