力扣 643. 子数组最大平均数 I

题目说明

给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。

  • 1 <= k <= n <= 30,000。
  • 所给数据范围 [-10,000,10,000]。

示例

例1

1
2
3
输入:[1,12,-5,-6,50,3], k = 4
输出:12.75
解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75

例2

1
2
3
输入:[0,4,0,3,2], k = 1
输出:4
解释:最大数为4, 答案为 4。

笔者理解

此题是一道数组求解算法问题,在力扣题库中被定义为简单题。

解法

当笔者阅读完此题后,发现此题比较直接,只要求出移动窗口的最大值即可

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public double findMaxAverage(int[] nums, int k) {
double result = 0;
int temp = 0;
//暂存当前计算到的序列的和
for (int i = 0; i < k; i++) {
result+=nums[i];
temp+=nums[i];
}
for (int i = k; i < nums.length; i++) {
temp = temp-nums[i-k]+nums[i];
//序列移动
result = Math.max(result,temp);
//存储最大值
}
return result/k;
}

时间和空间效率都较高,可见此解法比较适合此题;

image.png

总结

本题是今天的每日一题,难度是简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。