题目描述:
有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止,每次窗口滑动产生一个窗口和(窗口内所有数的和),求窗口滑动产生的所有窗口和的最大值。
输入描述:
第一行输入一个正整数N,表示整数个数。(O<N<100000)第二行输入N个整数,整数的取值范围为[-100,100]。
第三行输入一个正整数M,M代表窗口的大小,M<=100000,且M<=N。
输出描述:
窗口滑动产生所有窗口和的最大值口。
示例1
输入输出示例仅供调试,后台判题数据一般不包含示例
输入
6
12 10 20 30 15 23
3
输出
68
简单题,遍历窗口右边界,根据窗口长度计算左边界,当左边界大于0时,窗口累加和计算时就要开始减去左边的值(res-nums[i-1])
遍历完成后即可得到滑动窗口的最大值
package hwod;
import java.util.Scanner;
public class SlidingWin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
int size = sc.nextInt();
System.out.println(slidingWin(nums,size));
}
private static int slidingWin(int[] nums, int size) {
int res = 0, max = 0;
for (int j = 0; j < nums.length; j++) {
int i = j - size + 1;
res += nums[j];
if(i>0) {
res -= nums[i-1];
}
max = Math.max(max, res);
}
return max;
}
}
如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。
本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。