问题:数组
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.spa
Example 1:code
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:io
k
<= n
<= 30,000.解决:class
① 直接解将数组值相加,当相加的个数超过给定值k时,就减去最前面加上的值(i - k)。记录最大的和便可。im
public class Solution { //20 ms
public double findMaxAverage(int[] nums, int k) {
double max = Integer.MIN_VALUE; //不能使用Double.MIN_VALUE,不然输入[-1],1,结果错误
double sum = 0;
for (int i = 0;i < nums.length ;i ++ ) {
sum += nums[i];
if(i >= k){
sum -= nums[i - k];
}
if(i >= k - 1 && max <= sum) max = sum; //必须判断 i >= k - 1,不然结果不正确
}
return max / k;
}
} co
② 先算出前k个数的和,以后计算时加上下一个数,减去第一个数。错误
public class Solution { //22ms
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 = 1;i <= nums.length - k;i ++){
sum = sum - nums[i - 1] + nums[i + k - 1];
max = sum > max ? sum : max;
}
return ((double)max) / k;
}
}return