剑指offer(21)—栈的压入、弹出序列
来源:互联网 发布:淘宝网浅秋女羊毛衫 编辑:程序博客网 时间:2024/05/21 11:11
栈的压入、弹出序列
题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
思路
以入栈序列的顺序压入元素,以出栈序列的顺序弹出元素,由于没有重复元素,因此,当遇到冲突时,即返回false,冲突的判断:若下一个弹出的元素刚好是栈顶元素,则直接弹出,否则,继续压入入栈序列中的元素,直到将下一个需要弹出的元素压入栈顶为止,而如果所有元素都入栈,还没有找到下一个弹出的元素,则冲突
代码
class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { //若长度不等,则返回false int n_push = pushV.size(); int n_pop = popV.size(); if(n_push != n_pop) return false; bool res = false; stack<int> st; int next_push = 0, next_pop = 0; while(next_pop < n_pop){ //还有元素未出栈 while(st.empty() || popV[next_pop] != st.top()){ //栈为空,或者栈顶元素不等于待弹出的元素时,若还有未入栈的元素则将待压入元素入栈 if(next_push >= n_push) break; st.push(pushV[next_push]); next_push++; } if(popV[next_pop] != st.top()) break; st.pop(); next_pop++; } //若st为空,且出栈序列中没有元素未出栈,则一致,返回true; if(st.empty() && next_pop == n_pop) return true; return false; }};
阅读全文
0 0
- 剑指offer(21)—栈的压入、弹出序列
- 剑指offer 21 栈的压入、弹出序列
- 剑指Offer(21)______栈的压入、弹出序列
- 牛客网-剑指offer-21-栈的压入、弹出序列
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer——栈的压入、弹出序列
- 剑指offer——栈的压入,弹出序列
- 剑指offer——栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- offer,栈的压入、弹出序列
- 剑指Offer——(21)栈的压入、弹出序列
- 剑指Offer—21—栈的压入、弹出序列
- 【剑指offer】栈的压入弹出序列
- 剑指offer系列源码-栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 剑指Offer之 - 栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列
- java获取Class的三种方式
- 如何在 github 上 fork 一个项目来贡献代码
- linux C 学习笔记(二):底层文件访问
- HTMLParser
- Google Brain大牛Jeff dean视频
- 剑指offer(21)—栈的压入、弹出序列
- cannot find -lcaffe 解决
- 布隆过滤器BloomFilter原理剖析
- easyui tree 去掉默认图标,使用fontawesome
- Java线程面试题 Top 50
- 文本分析-预处理:Python文本分析工具NLTK
- SpringMVC中添加HTML等页面视图
- CSS position
- Spring事务配置的五种方式