思路
这道题给定了一个长为n的数组A,让你对数组A进行k次操作:每次删除数组第一个元素或者删除数组最后一个元素,然后求最终得到的数组和的最大值。
通过上述表达我们可以知道,进行完这一系列操作之后,数组A一定会变成n-k个索引连续的数组B,这个B数组可能会是A的前n-k个,也可能是中间的n-k个,也可是最后n-k个。所以问题就转化成了,A数组中,所有n-k大小的区间中,元素和的最大值是多少。
所以,不妨用前缀和,先去计算A数组前i个元素之和,然后我们从j = n-k这个初始位置进行遍历,已知遍历到A数组末尾,用sum[j] - sum[j-n+k]来计算每个n-k大小的区间中的数据之和,然后每次都去最大的作为答案即可。
代码
import java.util.Scanner;
/**
* @ClassName tb的区间问题
* @Date 2024-09-28 13:59
* @Author Administrator
* @Description TODO
*/
public class tb的区间问题 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int [] a = new int[n + 1];
for(int i = 1;i < n + 1;i ++) {
a[i] = sc.nextInt();
}
int []sum = new int[n + 1]; // 前缀和
for(int i = 1;i < n + 1;i ++) {
sum[i] = sum[i-1] + a[i];
}
int ans = 0;
int length = n - k;
for(int i = length;i < n + 1;i ++) {
ans = Math.max(ans,sum[i]-sum[i-length]);
}
System.out.println(ans);
}
}