题目描述
给定 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/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。