此问题来自leetcode。我的输出是正确的,并且通过了123/123测试用例,但是花费了太长时间。您能帮我改进我拥有的相同代码吗?
问题: 给定一个包含n个整数的数组,找到给定长度k的具有最大平均值的连续子数组。并且您需要输出最大平均值。
示例1:
输入:[1,12,-5,-6,50,3],k = 4 输出:12.75 说明:最大平均值为(12-5-6 + 50)/ 4 = 51/4 = 12.75
class Solution {
public double findMaxAverage(int[] nums, int k) {
int i = 0;
int j = 0;
double max = Integer.MIN_VALUE;
while(i+k <= nums.length){
double sum = 0;
while(i < k + j){
sum += nums[i];
i++;
}
max = Math.max(max, sum);
j++;
i = j;
}
return max/k;
}
}
答案 0 :(得分:2)
我想也许它会卡在while
之一上。
我们可以解决问题O(N)
:
public class Solution {
public static final double findMaxAverage(
final int[] nums,
final int k
) {
long currSum = 0;
for (int index = 0; index < k; index++) {
currSum += nums[index];
}
long maxSum = currSum;
for (int index = k; index < nums.length; index++) {
currSum += nums[index] - nums[index - k];
maxSum = Math.max(maxSum, currSum);
}
return (double) maxSum / k;
}
}