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 }

猜你喜欢

转载自www.cnblogs.com/LJHAHA/p/10205212.html