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].
想法如下
- 可以不用管平均,只要找到指定長度下,總和最大的 subarray 就是所求
- 利用 slicing window 的概念,先計算 1 到 k 這個 subarray 的和(sum),之後如果要計算 2 到 k+1 的和,就是 sum + nums[k+1] - nums[1]
Java(參考解答)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public double findMaxAverage(int[] nums, int k) { | |
double sum = 0; | |
for(int i = 0; i < k; i++) { | |
sum += nums[i]; | |
} | |
double ans = sum; | |
for(int i = k; i < nums.length; i++) { | |
sum += nums[i] - nums[i-k]; | |
ans = Math.max(ans, sum); | |
} | |
return ans / k; | |
} | |
} |
沒有留言:
張貼留言