Java实现检验一串数字的出栈合法性
题目描述:
解题思路:
判断出栈合法性的关键在于,对于每一个数,在它后面出栈且比它小的数,必是以降序排列的。
比如说3 4 2 1 5这一组数,对于第一个数 3 来说,后面比它小的数有 1、2,而在4 2 1 5这段子序列中,1、2是以降序 2 1排列的,所以3 2 1这个出栈顺序是合法的;
对于第二个数 4 来说, 后面比它小的数有 1、2,在 2 1 5 这段子序列中,同样是以降序 2 1来排列的,所以 4 2 1 这个出栈顺序是合法的;依次类推, 3 4 2 1 5这段出栈序列是合法的。
代码实现:
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String[] args) { 5 Scanner scanner=new Scanner(System.in); 6 while(scanner.hasNext()) { 7 int temp = 0,j,k; 8 boolean flag1,flag2,flag3 = false; 9 int n=scanner.nextInt(); 10 if(n==0) 11 break; 12 int[] a=new int[n]; 13 for(int i=0;i<n;i++) 14 a[i]=scanner.nextInt(); 15 for(int i=0;i<n;i++) { 16 flag1=false; 17 flag2=false; 18 for(j=i+1;j<n;j++) { 19 if(a[j]<a[i]) { 20 temp=a[j]; 21 flag1=true; 22 break; 23 } 24 } 25 if(flag1) { 26 for(k=j+1;k<n;k++) { 27 if(a[k]<a[i]) { 28 if(a[k]<temp) { 29 temp=a[k]; 30 } 31 else { 32 flag2=true; 33 } 34 } 35 } 36 if(flag2) { 37 flag3=true; 38 break; 39 } 40 } 41 } 42 if(flag3) 43 System.out.println("No"); 44 else 45 System.out.println("Yes"); 46 } 47 } 48 }