转载

【剑指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;
    }
};
转载请注明出处

http://www.zgljl2012.com/2017/01/07/jian-zhi-offer-zhan-de-ya-ru-dan-chu-xu-lie/

原文  http://www.zgljl2012.com/2017/01/07/jian-zhi-offer-zhan-de-ya-ru-dan-chu-xu-lie/
正文到此结束
Loading...