华为机试题:滑动窗口最大和

题目描述:

  • 有一个N个整数的数组和一个长度为M的窗口。
  • 窗口从数组内的第一个数开始滑动,直到窗口不能滑动为止。
  • 每次滑动产生一个窗口 和窗口内所有数的和。
  • 求窗口滑动产生的所有窗口和的最大值。

输入描述:

  • 第一行输入一个正整数N,表示整数个数 0<N<100000。
  • 第二行输入N个整数,整数取值范围 [-100,100]。
  • 第三行输入正整数M,M代表窗口的大小,M<=100000 并<=N。

输出描述:

  • 窗口滑动产生所有窗口和的最大值

示例:

输入:
6
12 10 20 30 15 23
3
输出:
68

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = Integer.parseInt(sc.nextLine());
String[] strs = sc.nextLine().split(" ");
int m = Integer.parseInt(sc.nextLine());
// 处理输入
int[] arr = new int[n];
for (int i = 0; i < n; ++i) {
arr[i] = Integer.parseInt(strs[i]);
}

// 滑动窗口往后移动
int max = 0;
for (int i = 0; i <= n - m; ++i) {
int sum = 0;
for (int j = i; j < i + m; ++j) {
sum += arr[j];
}
if (max < sum) {
max = sum;
}
}

System.out.println(max);
}
}
}
你的赞赏将是我创作输出的最大动力
0%