/* 某条街道两侧分别种植了一排树木,并按如下编号: 1 3 5 7 … 45 47 49 … 99 2 4 6 8 … 46 48 50 … 100 但是有一些树被砍去,希望你能找出一边最长的连续的大树。 输入 第一行一个整数N 第二行N个整数表示被砍去树的编号 输出 M 和 X(表示从第M棵大树开始,共有连续的X棵大树,如果有多个解,输出M最小的解即可) 样例输入 5 9 15 27 35 6 样例输出 8 47
import java.util.*;
public class Main{
public static void main(String[] ars){
Scanner scan=new Scanner(System.in);
while(scan.hasNext()){
int n=scan.nextInt();
//分别定义奇数偶数序列
List<Integer> ji=new ArrayList<Integer>();
List<Integer> ou=new ArrayList<Integer>();
for(int i=0;i<50;i++){
ji.add(2*i+1);
ou.add(2*i+2);
}
//根据输入删除奇数偶数序列中的数
for(int i=0;i<n;i++){
int temp=scan.nextInt();
if(temp%2==1){
for(int j=0;j<ji.size();j++){
if(ji.get(j)==temp){
ji.remove(j);
break;
}
}
}
else{
for(int j=0;j<ou.size();j++){
if(ou.get(j)==temp){
ou.remove(j);
break;
}
}
}
}
int maxvalue=0;
int maxstart=0;
int res=1;
int start=ji.get(0);
//遍历奇数中最长的连续子串长度和起始点
for(int i=0;i<ji.size()-1;i++){
if(ji.get(i+1)-ji.get(i)==2){
res++;
}
else{
if(res>maxvalue){
maxvalue=res;
maxstart=start;
//System.out.println("maxstart="+maxstart+" "+"maxvalue="+maxvalue);
}
res=1;
start=ji.get(i+1);
}
}
if(res>maxvalue){
maxvalue=res;
maxstart=start;
//System.out.println("maxstart="+maxstart+" "+"maxvalue="+maxvalue);
}
res=1;
start=ou.get(0);
//遍历偶数序列中最长连续的
for(int i=0;i<ou.size()-1;i++){
if(ou.get(i+1)-ou.get(i)==2){
res++;
}
else{
if(res>maxvalue){
maxvalue=res;
maxstart=start;
//System.out.println("oumaxstart="+maxstart+" "+"maxvalue="+maxvalue);
}
res=1;
start=ou.get(i+1);
}
}
if(res>maxvalue){
maxvalue=res;
maxstart=start;
//System.out.println("oumaxstart="+maxstart+" "+"maxvalue="+maxvalue);
}
//输出最长的
System.out.println(maxstart+" "+maxvalue);
}
return;
}
}