栈的压入、弹出序列
2015-08-27 22:23
337 查看
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
顺序为:push[middle]==pop[0];之后只能从middle--或middle++,一旦从end=size-1开始则只能end--。
!较好的方法:
同样的道理,push压入后,只能从当前位置pop,不然只能等下一个数压入后再pop,或等到末尾再pop。
顺序为:push[middle]==pop[0];之后只能从middle--或middle++,一旦从end=size-1开始则只能end--。
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { int left=0; int right=0; int middle=-1; int push_size=pushV.size(); int pop_size=popV.size(); if(push_size!=pop_size) return false; if(push_size==0) return false; for(int i=0;i<push_size;i++){ if(pushV[i]==popV[0]){ middle=i; break; } } if(middle==-1) return false; left=middle-1; right=middle+1; int k=1; int num=push_size-1; while(left>=0&&right<push_size&&k<pop_size){ if(popV[k]==pushV[left]){ k++; left--; continue; } if(popV[k]==pushV[right]){ k++; right++; continue; } if(popV[k]==pushV[num]){ while(k<pop_size){ if(popV[k]==pushV[num]){ k++; num--; if(num>left&&num<right) num=left; continue; } return false; } return true; } return false; } while(left>=0){ if(popV[k]==pushV[left]){ k++; left--; continue; } return false; } while(right<push_size){ if(popV[k]==pushV[right]){ k++; right++; continue; } return false; } return true; } };
!较好的方法:
同样的道理,push压入后,只能从当前位置pop,不然只能等下一个数压入后再pop,或等到末尾再pop。
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size()!=popV.size()) return false; if( 0==popV.size()) return false; vector<int> s; for(int i=0,j=0;i<pushV.size();i++) { s.push_back(pushV[i]); while(j<popV.size() && s.back()==popV[j]) { s.pop_back(); j++; } } return s.empty(); /* if(pushV.size() == 0) return false; vector<int> stack; for(int i = 0,j = 0 ;i < pushV.size();){ stack.push_back(pushV[i++]); while(j < popV.size() && stack.back() == popV[j]){ stack.pop_back(); j++; } } return stack.empty();*/ } };
相关文章推荐
- java环境变量配置
- Introduction to Java Programming编程题9.12<变位词>
- python 字符串组成MySql 命令时,字符串含有单引号或者双引号导致出错解决办法
- HDU 1863 畅通工程
- 如何使LoadRunner实现加密测试
- Roman to Integer
- nmon下载安装
- STM32 Timer : Base Timer, Input Capture, PWM, Output Compare
- iOS中的按钮(UIButton)
- storm wordcount实例
- HDU 1423
- 有关 MySQL数据库常见的误解
- 多线程之volatile
- Integer to Roman
- 奔跑吧,我的JavaScript(3)---JavaScript浏览器对象
- Office Add-in Model 简介
- 1.5 组件开发基础
- getCount()和getChlidCount() 区别
- Zigbee 调试问题Error[e12]: Unable to open file 'lnk51ew_cc2530b.xcl'
- 从12306谈起验证码的架构