解题思路:
定义一个累和数组arr,我们可以比较arr[ i ]和arr[ l ]之间的差值看是否大于等于2倍的x,满足则证明这两点之间可以跳满所有实际过河次数,此时记录最大距离,并移动左边界 l
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
int[] arr = new int[n + 1];
// 注意范围,arr[0]是起始岸,arr[n]是对岸
for (int i = 1; i < n; i++) {
arr[i] = sc.nextInt() + arr[i - 1];
}
// 对岸可以跳无数次
arr[n] = arr[n - 1] + 99999999;
int res = 0;
int l = 0;
for (int i = 1; i <= n; i++) {
if (arr[i] - arr[l] >= 2 * x) {
res = Math.max(res, i - l);
// 遇到的第一个max就要让l++,因为求的是最低跳跃能力,青蛙往距离最近且石头高度不为0的地方跳就行
l++;
}
}
System.out.print(res);
}
}