剑指offer-剑指offer——栈的压入弹出顺序 (两种不错的的解法)
来源:互联网 发布:linux语言切换 编辑:程序博客网 时间:2024/06/08 02:46
//剑指offer——栈的压入弹出顺序//输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。//假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,//序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。//(注意:这两个序列的长度是相等的)//方法一:使用一个hash表记录入栈顺序//基于结论:如果第n个元素出栈,那么在他前面入栈的元素一定是逆序出栈的。class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { unordered_map<int,int> p; for(int i = 0; i<pushV.size(); i++) p[pushV[i]] = i; int m = 0; for(int i = 0; i<popV.size(); i++){ if(p.find(popV[i]) == p.end()) return false; if(p[popV[i]] > m) m = p[popV[i]]; else if(p[popV[i]] > p[popV[i-1]]) return false; } return true; }};//方法二:vector模拟一个入栈class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { vector<int> stack; for(int i = 0,j = 0 ;i < pushV.size();i++){ stack.push_back(pushV[i]); //根据出栈顺序模拟出栈 while(j < popV.size() && stack.back() == popV[j]){ stack.pop_back(); j++; } } //全出栈就输出true,否则输出false. return stack.empty(); }};
阅读全文
0 0
- 剑指offer-剑指offer——栈的压入弹出顺序 (两种不错的的解法)
- 剑指offer:栈的压入弹出顺序
- 《剑指offer》——栈的压入、弹出序列
- 剑指offer——栈的压入、弹出序列
- 剑指offer——栈的压入,弹出序列
- 剑指offer——栈的压入、弹出序列
- 剑指offer——21.栈的压入、弹出
- 剑指offer—栈的压入、弹出序列
- 剑指offer(21)—栈的压入、弹出序列
- 剑指offer—栈的压入、弹出序列
- 栈的压入、弹出序列(剑指offer)
- 剑指Offer:栈的压入、弹出序列(JAVA)
- 剑指offer-栈的压入、弹出序列(标志:++)
- 剑指offer(23):栈的压入、弹出序列
- 剑指offer(18)-栈的压入、弹出序列
- 剑指offer:栈的压入、弹出序列(java)
- [剑指offer][面试题22]栈的压入、弹出顺序
- 剑指offer:第22题栈的压入、弹出顺序
- shell 脚本 判断用户是管理员还是系统用户还是普通用户脚本
- php 实现读取目录下所有文件
- 做数模的那些天——2017.9.19
- hdu 1226 超级密码
- Atitit 建立新组织集团模型的框架基本制度与一些原则
- 剑指offer-剑指offer——栈的压入弹出顺序 (两种不错的的解法)
- (三)OpenFlow协议
- 吐槽小程序开发踩过的坑,以及一些解决方法
- [基础笔记]使用虚拟机搭建Ubuntu Linux开发环境
- time的使用
- HDU
- 关于容器类的总结
- Java方法 主类中使用方法
- 百分比透明度与16进制透明度的对应关系