Java题解:子数组最大平均数

二筒 发布于

题目描述

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

示例:

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

提示:

  • 1 <= k <= n <= 30,000。

  • 所给数据范围 [-10,000,10,000]。

题解思路

之前做过一道滑动窗口的题目,这道题也可以用类似的方法来做

我们记录长度为k的子数组的和,然后返回最大的那个的平均值即可.

这里借用网上的一个图来解释

我们只需要先求出第一个窗口的和,然后滑动,算出剩下的窗口的和,选出最大的那个就可以了.

Solution

class Solution {
public double findMaxAverage(int[] nums, int k) {
double maxsum = 0;
double sum = 0;
//第一个窗口的和
for (int i = 0; i < k; i++) {
sum += nums[i];
}
//保存
maxsum = sum;
//求出最大和
for (int j = k; j < nums.length; j++) {
sum = sum + nums[j] - nums[j-k];
maxsum = Math.max(maxsum,sum);
}
//返回
return maxsum / k;
}
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-average-subarray-i/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。