(24) 不可能的出栈顺序

一、问题描述

给定两个数组,一个进栈顺序,一个出栈顺序。判定出栈数组的出栈顺序是不是有可能的。

二、Code

 1 package algorithm;
 2 
 3 import java.util.ArrayDeque;
 4 import java.util.Deque;
 5 
 6 /**
 7  * Created by adrian.wu on 2019/5/30.
 8  */
 9 public class StackPopOrderJudge {
10     /*
11     思路:
12     1、整体思路用一个辅助栈还原入栈元素的顺序,并比较两者是否一致
13     2、如果第一个出栈元素并非最后一个入栈元素,则这个出战元素之前的元素不可能先于它出栈,因此把这个元素即之前的元素都压入栈
14     3、上述步骤之后,如果出栈元素并非入栈栈顶元素,则其是先pop出去了,因此直接压人辅助栈
15     4、重复上述步骤,并比较辅助栈和压入栈的元素,遇到相同则pop
16     5、观察最后入栈元素和辅助栈是否都为空,为空则正确,不为空则False
17      */
18 
19     public static boolean isPopOrder(int[] in, int[] out) {
20         int n = out.length;
21         int nextPop = 0, nextPush = 0;
22         Deque deque = new ArrayDeque<>();
23 
24 
25         while (nextPop != n) {
26             while (deque.isEmpty() || deque.peek() != out[nextPop]) {
27                 if (nextPush == n) break;
28                 deque.push(in[nextPush++]);
29             }
30 
31             if (!deque.isEmpty() && deque.peek() != out[nextPop++]) break;
32             deque.pop();
33         }
34         return nextPop == n && deque.isEmpty();
35     }
36 }

 

你可能感兴趣的:((24) 不可能的出栈顺序)