剑指offer—栈的压入、弹出序列
来源:互联网 发布:java系统架构师 编辑:程序博客网 时间:2024/05/16 11:22
华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/3
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
解析:这个题目笔算的时候是没有一点问题的,属于简单题目。编程写的时候用两个指针,分别指示入栈序列和出栈序列已经指向的元素,用一个栈记录入栈未出栈元素。主要注意出栈向量指针的三种情况:
1、入栈向量指针和出栈向量指针指向的元素相同的话,两个指针向后走(不用入栈s)
2、栈顶元素和出栈向量指针指向元素相同的话,栈顶元素出栈
3、如果出栈向量指针指向的元素和入栈向量指针指向的元素和栈顶元素均不相同的时候,若入栈向量指针不到末尾,则入栈,否则返回false.
如果模拟完成,则返回true.
class Solution{public: bool IsPopOrder(vector<int> pushV, vector<int> popV) { if(pushV.size()==NULL) return false; stack<int> s; int pNext = 0, n = pushV.size(), pOut = 0; while (pOut < n) { if ((pNext<n) && (pushV[pNext] == popV[pOut])) { pNext++; pOut++; } else { if ((s.empty()==false)&&(s.top() == popV[pOut])) { s.pop(); pOut++; } else { if (pNext < n) { s.push(pushV[pNext]); pNext++; } else return false; } } } return true; }};
0 0
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer——栈的压入、弹出序列
- 剑指offer——栈的压入,弹出序列
- 剑指offer——栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- 剑指offer(21)—栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- offer,栈的压入、弹出序列
- 【剑指offer】栈的压入弹出序列
- 剑指offer系列源码-栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 剑指Offer之 - 栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- 剑指Offer系列---(24)栈的压入、弹出序列
- 栈的压入、弹出序列(剑指offer)
- 剑指 offer:栈的压入、弹出序列
- 【剑指Offer】栈的压入、弹出序列
- 搜索二维矩阵 II
- 关于findviewbyid
- 大话数据结构--排序
- Spring MVC 解读——@RequestMapping
- HLL select from 语言
- 剑指offer—栈的压入、弹出序列
- [深入理解Java虚拟机]第一章实战 自己编译JDK
- Spring MVC 解读——View,ViewResolver
- C/C++求非波拉契排列第N项
- 对象状态
- 成员变量、类变量、局部变量的区别
- 异常
- 找出第二个文本抄袭第一个文本的所有位置和长度 后缀数组 UVA 10526 - Intellectual Property
- 数据库的事物隔离级别通俗理解