华为OD机试 2023B卷题库疯狂收录中,刷题点这里
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
有一个N个整数的数组,和一个长度为M的窗口,窗口从数组内的第一个数开始滑动直到窗口不能滑动为止,每次窗口滑动产生一个窗口和(窗口内所有数和和),求窗口滑动产生的所有窗口和的最大值。
第一行输入一个正整数N,表示整数个数。(0 第二行输入N个整数,整数的取值范围为[-100,100]。 第三行输入一个正整数M,M代表窗口大小,M<=100000,且M<=N。 窗口滑动产生的所有窗口和的最大值。 例如: 1、输入 6 2、输出 48 3、说明 窗口长度为3,窗口滑动产生的窗口和分别为10+20+30=60,20+30+15=65,30+15+23=68,15+23+12=50,所以窗口滑动产生的所有窗口和的最大值为68。 7 48 窗口长度为3,窗口滑动产生的窗口和分别为: 窗口滑动产生的所有窗口和的最大值是48。 下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分) 本文收录于,华为OD机试(JAVA)真题(A卷+B卷) 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。三、输出描述
10 20 30 15 23 12
3四、解题思路
五、Java算法源码
package com.guor.od;
import java.util.*;
public class OdTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 整数个数
int N = Integer.valueOf(sc.nextLine());
// N个整数
int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
// 窗口大小
int M = Integer.valueOf(sc.nextLine());
// 窗口滑动产生的所有窗口和的最大值
int max = Integer.MIN_VALUE;
// 当滑动窗口大小为1时,取最大值即可
if (M == 1) {
// 使用 Arrays.stream() 方法将数组转换为流,然后使用 max() 方法获取最大值
max = Arrays.stream(arr).max().getAsInt();
} else {
// 滑动窗口算法
for (int i = 0; i < N - M + 1; i++) {
int temp = 0;
for (int j = i; j < i + M; j++) {
temp += arr[j];
}
if (temp > max) {
max = temp;
}
}
}
System.out.println(max);
}
}
六、效果展示
1、输入
10 15 8 22 9 17 20
32、输出
3、说明