剑指offer-合法的出栈序列
2017-06-01 21:13
288 查看
问题
题目:[合法的出栈序列]思路
这个题我模拟了,写的有点麻烦。基本思路是考虑出栈序列,对于每一个出栈元素,进行模拟,因为如果当前元素要出栈,那么证明他以及他之前的元素都在栈内。所以,将之前的元素入栈即可。
可以写如下判断逻辑:
1.如果当前出栈元素在栈里面(其实用集合判断),只需判断栈顶和当前出栈元素是否一样。如果不一样,返回false.
2.如果当前出栈元素不在栈里面,只能是从入栈的序列里面进行扫描,直到遇到当前元素,一直入栈。
这个有个异常数据就是如果入栈序列和出在序列里面存在不同的元素,这个是我之前没有考虑到的。比如[1,2],[2,3]
代码
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { set<int> visit; stack<int> stk; int sz_push = pushV.size(); if(!sz_push) return true; int sz_pop = popV.size(); int j = 0; for(int i = 0; i < sz_pop; ++i){ if( visit.find(popV[i]) == visit.end() ){ while(j < sz_push ){ stk.push( pushV[j] ); visit.insert(pushV[j]); if( pushV[j] == popV[i] ) break; ++j; } if( j == sz_push ) return false; stk.pop(); ++j; } else{ if( popV[i] == stk.top() ) stk.pop(); else return false; } } return true; } };
相关文章推荐
- 给定入栈序列,求出合法的出栈序列的个数
- POJ 1363 Rails 判断出栈序列是否合法
- 夕拾算法进阶篇:10)打印出栈序列&出栈序列是否合法(stack)
- 判断出栈序列是否合法
- 栈——判断栈的入出栈序列是否合法
- 给定入栈序列,判断出栈序列是否合法
- 卡特兰数(Catalan)应用:输出所有N对合法括号序列和输出所有已知进栈序列的合法出栈序列
- 每日一题(35) - 栈的压入、弹出序列(验证出栈序列是否合法)
- 剑指offer-给出一个入栈序列和一个出栈序列,判断出栈序列是否合法。
- 给定入栈序列判断给定出栈序列是否合法
- 已知入栈顺序,判断某一序列是否为其合法出栈序列!
- 给定入栈序列,判断出栈序列是否合法
- 每日一题(35) - 栈的压入、弹出序列(验证出栈序列是否合法)
- 判断元素出栈、入栈顺序的合法性。如:入栈的序列( 1,2,3,4,5 ),出栈序列为 ( 4,5,3,2,1 )是合法序列,入栈的序列( 1,2,3,4,5 ),出栈序列为( 1,5,3,2,4 )是
- 检验入栈序列、出栈序列是否合法
- 判断出栈序列是否合法
- 判断出栈序列是否合法
- 判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列
- 判断序列是否为合法出栈
- UVA 514 栈判断出栈序列是否合法