首页 > 判断出栈顺序是否正确(栈的压入、弹出序列)

判断出栈顺序是否正确(栈的压入、弹出序列)

输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。

  比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。

 

直接上代码,共有两种方法。

package test;
import java.util.Stack;
public class StackPopSeq {/*** 根据数字排列特性* 若a[i+1] > a[i],则a[i+1] 大于前面所有的数* 即,如果按小到大出来的数,必定是进去就出来,那么比它们还大的数,就不可能比他们还早出来* @param a* @return*/private static boolean isPopSeqByNO(int[] a) {boolean flag = true;int max = a[0];for(int i=1;i){if(a[i-1]max){flag = false;break;}max = Math.max(Math.max(a[i-1],a[i]),max);}return flag;
}/*** 通过模拟栈的进出进行判断,* 先for循环把arr1中的元素入栈,并在每次遍历时,检索arr2中可以pop的元素。* 如果循环结束,而stack中还有元素,就说明arr2序列不是pop序列。* @param a1* @param a2* @return*/private static boolean isPopSeqBySimulate(int[] a1, int[] a2) {// TODO Auto-generated method stub
    Stack s = new Stack();for(int i=0,j=0;i){s.push(a1[i]);while(!s.empty()&&a2[j]==(int)s.peek()){s.pop();j++;}}return s.size()==0;}public static void main(String[]args){int []a1={1,2,3,4,5,6,7};int []a2={1,2,3,7,6,5,4};int []a3={1,2,3,7,5,6,4};System.out.println(isPopSeqBySimulate(a1,a2));System.out.println(isPopSeqBySimulate(a1,a3));System.out.println(isPopSeqByNO(a2));System.out.println(isPopSeqByNO(a3));}}

 

转载于:https://www.cnblogs.com/bendantuohai/p/4680814.html

更多相关:

  • 题目:栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1:...

  • 简单版 @for $i from 1 through 6 {&:nth-of-type(#{$i}) img {transition-delay: calc(0.1 *#{$i}s);//逐次延时效果} } 进阶版 @for $i from 1 through length($数组) {$color: nth($数组, $i);...

  • Gold Code Gold Code是以Robert Gold的名字命名的。它是一组特殊的二进制随机(伪随机)序列,其中成员序列之间的相关性很小。由于这种特性(较小的相关性),它被广泛地用作各种无线通信系统的扰码。 我们可以非常简单地利用 m序列 来生成Gold Code: 选择两个m序列,且这两个序列的移位寄存器的数量相同,然...

  • 翻译自:sharetechnote: LFSR LFSR Linear Feedback Shift Register - 线性反馈移位寄存器 LFSR 是一种移位寄存器电路,其中两个或多个中间步骤的输出线性组合并反馈到输入值,这就是为什么它被称为线性反馈移位寄存器的原因。 该电路具有以下特点: 如果初始状态相同,则最终会得到...

  • 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...