题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
 
 
 
题目链接:
 
 
 
 
package com.sunshine.OFFER66_SECOND;

import org.junit.Test;

import java.util.Stack;

public class A21_IsPopOrder {


    @Test
    public void test() {
        int[] pushA = {1, 2, 3, 4, 5};
        int[] popA = {4, 3, 5, 2, 1};
        System.out.println(IsPopOrder(new int[]{}, new int[]{1}));
    }


    public boolean IsPopOrder(int[] pushA, int[] popA) {
        Stack<Integer> base = new Stack<>();
        int cur = 0;
        int pos = 0;
        while (cur < pushA.length) {
            base.push(pushA[cur++]);
            while (pos < popA.length && popA[pos] == base.peek()) {
                base.pop();
                pos++;
            }
        }
        if (!base.empty() || pos != popA.length) {
            return false;
        }
        return true;
    }
}

 

posted on 2019-08-29 16:20  MoonBeautiful  阅读(120)  评论(0编辑  收藏  举报