算法学习-栈2

"这是一个Java程序,用于读取输入的整数序列并判断是否符合特定条件。程序首先读取一个整数N,然后读取N个整数形成一个序列。如果序列中每个数都大于等于前一个数,且序列开始时的数字可以由1到序列首项之间的所有整数按顺序推导得出(即栈操作),则输出"Yes",否则输出"No"。程序使用了栈数据结构辅助判断。"
摘要由CSDN通过智能技术生成

import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;

public class hdu_1363_Rails_201308121938 {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub
    Scanner sc =new Scanner (System.in);
     Stack<Integer> st = new Stack<Integer>();
    while(true){//11969046 1983210400 1363 Accepted 6712K 1063MS Java 1823B 2013-08-12 21:46:05 
       
        int N =sc.nextInt();
        if(N==0)break;
        int []s = new int [N+10];
       
        while(true){
        	
             s[1]=sc.nextInt();	
        	if(s[1]==0)break; 
        	
        	boolean []vis =new boolean [N+10];//标记已经查看过的数
             Arrays.fill(vis, false);
        	
        	
        	for(int i=2 ; i<= N; i++)
        	s[i]=sc.nextInt();
       
        	for(int i=1; i<s[1]; i++)//自身不进栈
    			st.push(i);
        	vis[s[1]]=true;
        	boolean flag = false;
        	
        	for(int i=2; i<= N; i++){           		
        		
        		vis[s[i]]=true;
        		
        		if(s[i]<s[i-1]){
        			
        			if(st.peek()!=s[i]){
        				System.out.println("No");
        				flag=true;
        				break;
        			}
        			else{
        				st.pop();
        				continue;  
        			}	 			
        		}
        		
        		else if(s[i]>s[i-1]){
        			
        				for(int j=s[i-1]+1;j<s[i];j++){
        					if(!vis[j]){
        						st.push(j);
        					}
        				}
        		}
        	}	
        	if(flag==false){
        		System.out.println("Yes");
        	}
        }
        System.out.println();
    
    }       		
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值