剑指offer-剑指offer——栈的压入弹出顺序 (两种不错的的解法)
2017-09-19 00:20
295 查看
//剑指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(); } };
相关文章推荐
- [剑指offer][面试题22]栈的压入、弹出顺序
- 剑指Offer之栈的压入、弹出序列
- 剑指Offer:面试题22——栈的压入,弹出序列(java实现)
- 【剑指Offer面试题】 九度OJ1366:栈的压入、弹出序列
- 剑指offer——面试题22:栈的压入、弹出序列
- 剑指Offer面试题:20.栈的压入、弹出序列
- 【剑指Offer面试编程题】题目1366:栈的压入、弹出序列--九度OJ
- 【剑指offer】之栈的压入弹出序列
- 剑指OFFER之栈的压入、弹出序列(九度OJ1366)
- 剑指offer--栈的压入、弹出序列
- 剑指 offer:栈的压入、弹出序列
- 【剑指offer】栈的压入、弹出序列
- 剑指offer(13)-栈的压入、弹出序列 九度1366
- [剑指offer]栈的压入、弹出序列
- 剑指offer--栈的压入、弹出序列
- 栈的压入、弹出序列 (剑指Offer 第 20 题)
- 剑指Offer-栈的压入弹出序列
- 剑指offer面试题 栈的压入、弹出序列
- 剑指offer 面试题22:栈的压入、弹出序列 题解
- 剑指offer——栈的压入、弹出序列