Question
Given an array consisting of n integers, find the contiguous subarray of given length k that has the maximum average value. And you need to output the maximum average value.
Example 1:
Input: [1,12,-5,-6,50,3], k = 4
Output: 12.75
Explanation: Maximum average is (12-5-6+50)/4 = 51/4 = 12.75
Note:
- 1 <= k <= n <= 30,000.
- Elements of the given array will be in the range [-10,000, 10,000].
问题解析:
从数组中找到k个连续元素和最大的子数组,返回最大子数组的平均值。
Answer
Solution 1:
利用滑动窗口实现。
- 注意题目中给定的条件,数组中的元素范围为[-10000,10000],元素个数在[1,30000]之间,和最大的情况下是:300000000,没有超出Java中int类型的范围:-2^{32}~2^{32}-1;
- 利用大小为k的滑动窗口遍历找到和最大的子数组。
class Solution {
public double findMaxAverage(int[] nums, int k) {
int sum = 0;
for (int i = 0; i < k; i++){
sum += nums[i];
}
int max = sum;
for (int i = k; i < nums.length; i++){
sum += nums[i] - nums[i-k];
max = Math.max(sum,max);
}
return max * 1.0 / k;
}
}
- Runtime: 21 ms
- Beats 61.16 % of java submissions
- 时间复杂度:O(n);空间复杂度:O(1)