滑动窗口练习,求一个数组中所有大小为k的连续子数组的平均值Java
时间: 2024-04-30 19:21:07 浏览: 100
可以使用滑动窗口来解决这个问题,具体步骤如下:
1. 初始化一个变量sum,表示当前窗口内元素的和;
2. 遍历数组,每次将当前元素加入sum,并将sum减去窗口左侧的元素(如果窗口大小大于k);
3. 当窗口大小达到k时,计算窗口内元素的平均值,并将结果存储在结果数组中;
4. 遍历完数组后,返回结果数组。
下面是Java代码实现:
```java
public static double[] findAverages(int[] arr, int k) {
double[] result = new double[arr.length - k + 1];
double sum = 0;
int windowStart = 0;
for (int windowEnd = 0; windowEnd < arr.length; windowEnd++) {
sum += arr[windowEnd];
if (windowEnd >= k - 1) {
result[windowStart] = sum / k;
sum -= arr[windowStart];
windowStart++;
}
}
return result;
}
```
其中,arr表示输入的数组,k表示窗口大小,result表示结果数组。函数返回所有大小为k的连续子数组的平均值。
相关问题
滑动窗口练习,求一个数组中所有大小为k的连续子数组的平均值Java
可以使用滑动窗口的思想,维护一个大小为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`数组即可。
滑动窗口练习:求一个数组中所有大小为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;
}
```
使用示例:
```
int[] arr = { 1, 3, 2, 6, -1, 4, 1, 8, 2 };
int K = 5;
double[] result = findAverages(K, arr);
for (double d : result) {
System.out.print(d + " ");
}
```
输出结果为:
```
2.2 2.8 2.4 3.6 2.8
```
其中,结果数组`result`的长度为`arr.length - K + 1`,即为滑动窗口的数量,每个位置存储的是对应窗口内的平均值。`windowStart`和`windowEnd`分别表示当前窗口的起始和结束下标,`windowSum`表示当前窗口内的元素和。当窗口大小达到K时,计算窗口内的平均值并将结果存入数组中,同时将窗口左侧的元素移除,向右滑动窗口。
阅读全文