我是靠谱客的博主 重要吐司,最近开发中收集的这篇文章主要介绍Java_如何判断某一数列是该数列入栈的可弹出序列?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如何判断某一数列是该数列入栈的可弹出序列?
如题:
1.判断下列数列是否为数列[1,2,3,4,5]按一定方式(只能从开始按顺序选取一个或多个数字)入栈的可弹出序列。
A:[1,2,5,3,4]
B:[3,2,1,4,5]
C:[1,2,4,5,3]
D:[5,2,4,1,3]

分析解答:
我们想要解决这个问题,首先就要了解堆栈存储数据的基本特征,那就是先入后出,也可以说是后入先出。

 即一次性存入[1,2,3,4,5],出栈的顺序一定是[5,4,3,2,1]
 若先入栈[1,2,3],出栈后入栈[4,5],则最终所有出栈为[3,2,1,5,4]

题目中直接判断就可以得出答案,例如A选项,想要得到1只需要第一次入栈1再出栈即可,想要得到2只需要入栈2再出栈2即可,想要得到5必须要入栈剩下的3,4,5(据题意不能略过3和4直接入5)再出栈才可以得到5,但是这样下一个数字就不能是3,而只能是4。故A选项是错误的,其他依次判断即可。
那么我们如何借助计算机帮我们实现这一判断功能呢?
首先找出解题思路:
在这里插入图片描述
接下来就来看具体实现的代码吧!


  public class StackOutOrder<T> {
  public static <T>boolean isStackOutOrder(T[] arr, T[] order) {
     Stack<T> stack = new Stack<>();
     int idex = 0;
     if (arr.length <= 0 || arr.length!=order.lenth ){/*判断数 
                                                  组非空且一致*/
            return false;
        }
     for (int i = 0; i < arr.length; i++) {
            stack.push(arr[i]);//将题目所给数列压入栈
     while (!stack.isEmpty() && stack.peek() == order[idex]) {
                stack.pop();//弹出栈顶
                idex++;    //数组下标后移一位
            }
        }
      if (stack.isEmpty()) {//如果是可弹出序列,则可以全部弹出
            return true;
      } else
            return false;
    }

如果有错误的地方,欢迎在评论区及时指正!

最后

以上就是重要吐司为你收集整理的Java_如何判断某一数列是该数列入栈的可弹出序列?的全部内容,希望文章能够帮你解决Java_如何判断某一数列是该数列入栈的可弹出序列?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部