【劍指Offer】棧——是否爲同一棧的push和pop

package cn.dzp.flyroc.offer;

import java.util.Stack;

public class IsPopOrderDemo {

    /*題目描述:輸入兩個整數序列,第一個序列表示壓入順序,
    請判斷第二個序列是否爲該棧的彈出順序。
    * 假設壓入棧的全部數字均不相等。
    * 例如:1,2,3,4,5,是某棧的壓入順序,
    * 序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,
    * 4,3,5,1,2就不多是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)*/

    //思路:用棧來壓入彈出元素,相等則出棧


    /*實現步驟:
    * 1、定義兩個pushpop數組
    * 2、判斷兩個數組是否爲空
    * 3、定義一個棧
    * 4、定義pop數組的索引值(用來判斷出棧時的棧頂元素是否和pop數組的元素相等)
    * 5、遍歷push數組
    * 6、將元素壓入到棧中
    * 7、出棧*/

    //代碼實現
    public boolean IsPopOrder(int[] arrPush, int[] arrPop){     //定義pushpop數組

        if (arrPush == null || arrPop == null){

            return false;
        }

        Stack<Integer> stack = new Stack<>();       //定義棧
        int index = 0;      //定義pop數組索引值


        for (int i = 0; i < arrPush.length; i++){       //遍歷push元素

            stack.push(arrPush[i]);

            while(!stack.isEmpty() && stack.peek() == arrPop[index]){

                stack.pop();
                index++;
            }

        }
        return stack.isEmpty();
    }
}
相關文章
相關標籤/搜索