活动地址:CSDN21天学习挑战赛
题目描述
近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?
输入描述
N 总种植数量 1<=N<=100000 M 未成活胡杨数量 1<=M<=N M 个空格分隔的数,按编号从小到大排列 K 最多可以补种的数量 0<=K<=M
输出描述
最多的连续胡杨棵树
示例1
输入
5
2
2 4
1
输出
3
说明 补种到2或4结果一样,最多的连续胡杨棵树都是3
示例2
输入
10
3
2 4 7
1
输出
6
说明 补种第7棵树,最多的连续胡杨棵树为6(5,6,7,8,9,10)
思路解释
代码展示
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Day11ReplantingPopulusEuphratica {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < M; i++) {
list.add(in.nextInt());
}
int K = in.nextInt();
int max = 0;
//由于nums数组是从小到大排列的所以只要在nums中连续取K个数就可以列举出所有情况
for (int i = K-1; i < M; i++) {
if(i==K-1){
//从第一个数开始取
max = Math.max(max, list.get(K)-1);
}else if(i==M-1){
//取到最后一个
max = Math.max(max,N-list.get(i-K));
}else {
//取中间的数
max = Math.max(max, list.get(i+1)-list.get(i-K)-1);
}
}
System.out.println(max);
}
}