滑动窗口练习,求一个数组中所有大小为k的连续子数组的平均值Java
时间: 2024-05-15 13:14:21 浏览: 6
可以使用滑动窗口的思想,维护一个大小为k的窗口,每次向右移动一位,计算窗口内的平均值,将其放入结果数组中。
Java代码如下:
```java
public static double[] findAverages(int k, int[] arr) {
double[] result = new double[arr.length - k + 1];
double windowSum = 0;
int windowStart = 0;
for (int windowEnd = 0; windowEnd < arr.length; windowEnd++) {
windowSum += arr[windowEnd];
if (windowEnd >= k - 1) {
result[windowStart] = windowSum / k;
windowSum -= arr[windowStart];
windowStart++;
}
}
return result;
}
```
其中,`k`表示子数组的大小,`arr`表示原始数组。`result`数组保存所有子数组的平均值。`windowSum`保存窗口内元素的和,`windowStart`表示当前窗口的起始位置,`windowEnd`表示当前窗口的结束位置。当窗口大小达到`k`时,计算平均值并且将结果放入`result`数组中,同时将窗口的起始位置向右移动一位,窗口的结束位置也随之向右移动一位。最后返回`result`数组即可。