(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<Integer> 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 }

 

转载于:https://www.cnblogs.com/ylxn/p/10954150.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值