【剑指Offer】栈的压入、弹出序列
问题描述:
输入两个整数序列,第一个序列表示栈的压入顺序,
请判断第二个序列是否为该栈的弹出顺序。假设压入
栈的所有数字均不相等。例如序列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;
}
};