You are given an integer array nums consisting of n elements, and an integer k.
Find a contiguous subarray whose length is equal tok that has the maximum average value and return this value. Any answer with a calculation error less than 10-5 will be accepted.
To find the maximum average of a subarray of length k, we can use a sliding window of size k and keep track of the sum as we move the window. This allows us to efficiently compute the sum for each window in O(1) time after the first window.
classSolution {
public:double findMaxAverage(vector<int>& nums, int k) {
int n = nums.size();
double sum =0, ans =-1e9;
for (int i =0; i < k; ++i) sum += nums[i];
ans = sum;
for (int i = k; i < n; ++i) {
sum += nums[i] - nums[i-k];
ans = max(ans, sum);
}
return ans / k;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
funcfindMaxAverage(nums []int, kint) float64 {
n:= len(nums)
sum:=0fori:=0; i < k; i++ {
sum+=nums[i]
}
ans:=sumfori:=k; i < n; i++ {
sum+=nums[i] -nums[i-k]
ifsum > ans {
ans = sum }
}
return float64(ans) / float64(k)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution {
publicdoublefindMaxAverage(int[] nums, int k) {
int n = nums.length;
double sum = 0, ans =-1e9;
for (int i = 0; i < k; ++i) sum += nums[i];
ans = sum;
for (int i = k; i < n; ++i) {
sum += nums[i]- nums[i-k];
ans = Math.max(ans, sum);
}
return ans / k;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
classSolution {
funfindMaxAverage(nums: IntArray, k: Int): Double {
val n = nums.size
var sum = 0.0for (i in0 until k) sum += nums[i]
var ans = sum
for (i in k until n) {
sum += nums[i] - nums[i-k]
ans = maxOf(ans, sum)
}
return ans / k
}
}
1
2
3
4
5
6
7
8
9
classSolution:
deffindMaxAverage(self, nums: list[int], k: int) -> float:
n = len(nums)
s = sum(nums[:k])
ans = s
for i in range(k, n):
s += nums[i] - nums[i-k]
ans = max(ans, s)
return ans / k
1
2
3
4
5
6
7
8
9
10
11
12
impl Solution {
pubfnfind_max_average(nums: Vec<i32>, k: i32) -> f64 {
let n = nums.len();
letmut sum: i32= nums[..k asusize].iter().sum();
letmut ans = sum;
for i in k asusize..n {
sum += nums[i] - nums[i-k asusize];
ans = ans.max(sum);
}
ans asf64/ k asf64 }
}