【剑指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();
    }
}
相关文章
相关标签/搜索