输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序。假设压入 栈的所有数字均不相等。例如序列1,2,3,4,5是某栈 的压入顺序,序列4,5,3,2,1是该压栈序列对应的 一个弹出序列,但4,3,5,1,2就不可能是该压栈序列 的弹出序列。
首先判断两个序列的元素数目是否相等, 不相等,则肯定不是; 相等,进入下一步: 遍历Pop,每遍历一个数,先将Push数组里的压入栈,以i为push数组游标, 直到栈顶值与当前Pop值相等, ,然后弹出栈顶值,如果 直到i大于push数组的大小还没碰到栈顶值与pop数组相等 的值,则返回false
class Solution { public: bool IsPopOrder(vector<int> pushV, vector<int> popV) { if (pushV.size() != popV.size()) return false; stack<int> s; int i = 0; for (int popData : popV) { while (s.empty() || s.top() != popData) { if (i == pushV.size()) return false; s.push(pushV[i++]); } s.pop(); } return true; } };转载请注明出处
:
http://www.zgljl2012.com/2017/01/07/jian-zhi-offer-zhan-de-ya-ru-dan-chu-xu-lie/