子数组最大平均数I

LeetCode每日一题,643. Maximum Average Subarray I

先看题目描述

y1k9g0.png

大意就是给定一个数组 nums 和一个整数 k,让我们求出 nums 中长度为 k 的子数组的最大平均值并返回

算法和思路

滑动窗口

这题很简单,使用滑动窗口即可

使用长度为 k 的滑动窗口,然后一直向右移动滑动窗口直至窗口到达数组最右边,移动滑动窗口的过程中使用变量 cur 维护当前滑动窗口内的元素之和,使用变量 max 来维护移动过程中的滑动窗口内的最大元素和,最后返回 max / k 即可

算法源码

滑动窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public double findMaxAverage(int[] nums, int k) {
int len = nums.length;
int cur = 0;
for (int i = 0; i < k; i++) {
cur += nums[i];
}
int max = cur;
for (int i = k; i < len; i++) {
cur += nums[i];
cur -= nums[i - k];
max = Math.max(max, cur);
}
return (double)max / k;
}
}