【剑指offer】31.栈的压入、弹出序列

117 阅读1分钟

题目:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

  1. 0<=pushV.length == popV.length <=1000
  2. -1000<=pushV[i]<=1000
  3. pushV 的所有数字均不相同 思路: 借助一个辅助栈模拟压栈数据,不断比较栈顶和pop序列,如果相同则弹栈否则入栈,如果最后栈弹到为空,则说明该压入顺序和该弹出序列对应;如果为不空,则说明不是与之对应的
function IsPopOrder(pushV, popV)
{
    // write code here
    var pushIndex=0;
    var popIndex=0;
    var stackData=[];
    while(pushIndex<=pushV.length-1 && popIndex<=popV.length-1){
        while(pushV[pushIndex]!==popV[popIndex] &&pushIndex<=pushV.length-1 ){
            stackData.push(pushV[pushIndex++]);
        }
        stackData.push(pushV[pushIndex++]);
        while(stackData[stackData.length-1]===popV[popIndex] && popIndex<=popV.length-1){
            stackData.pop();
            popIndex++;
        }   
    }
    
    if(stackData.length===0&& pushIndex===pushV.length && popIndex===popV.length){
        return true;
    }else{
        return false;
    }
}