剑指offer 栈的压入、弹出序列
来源:互联网 发布:吉他弹唱录音软件 编辑:程序博客网 时间:2024/06/05 14:58
题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
思路:
模拟入栈操作。定义两个指针,p1,p2,分别指向入栈序列和弹出序列,如果栈顶元素等于当前p2指向的弹出序列元素,则将p2++,然后弹出栈的元素;如果不等于,则p1++,继续入栈,如果p1指向末尾了,p2还没有结束,则失败,否则成功。
#include <cstdio>#include <stack>using namespace std;const int maxn = 100000 + 10;int in[maxn];int out[maxn];int main(){ int n; int p1, p2; stack<int> s; while(scanf("%d", &n) != EOF){ while(!s.empty()) s.pop(); p1 = 0, p2 = 0; for(int i = 0; i < n; i++){ scanf("%d", &in[i]); } for(int i = 0; i < n; i++){ scanf("%d", &out[i]); } while(1){ if(s.empty()){ if(p1 == n) break; else s.push(in[p1++]); } else{ if(s.top() == out[p2]){ s.pop(); p2++; } else{ if(p1 == n) break; else s.push(in[p1++]); } } } if(p2 != n) printf("No\n"); else printf("Yes\n"); } return 0;}
0 0
- offer,栈的压入、弹出序列
- 【剑指offer】栈的压入弹出序列
- 剑指offer系列源码-栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 剑指Offer之 - 栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 《剑指offer》栈的压入、弹出序列
- 剑指Offer系列---(24)栈的压入、弹出序列
- 栈的压入、弹出序列(剑指offer)
- 剑指 offer:栈的压入、弹出序列
- 【剑指Offer】栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- 剑指offer:栈的压入弹出序列
- 剑指Offer-22-栈的压入、弹出序列
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- 【剑指offer】之栈的压入弹出序列
- 剑指Offer:栈的压入、弹出序列(JAVA)
- Android特效 五种Toast详解
- Java数据类型字节数
- 关于Android中添加id
- Ultra-QuickSort
- CocoaPods安装和使用详细说明
- 剑指offer 栈的压入、弹出序列
- Hdu oj 1232 畅通工程(并查集)
- android图片轮播效果viewPager
- httpclient4.x 使用连接池发送https请求
- 集合可变
- tomcat catalina.out 日志分割
- MapReduce怎样实现二级排序
- libpng warning: iCCP: Not recognizing known sRGB profile that has been edited问题的解决
- 【Android】Ant打包签名时中文alias怎么办