概述
如何判断某一数列是该数列入栈的可弹出序列?
如题:
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_如何判断某一数列是该数列入栈的可弹出序列?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复