如何解决最大平均子数组I,Leetcode超过时间限制
此问题来自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;
}
}
解决方法
-
我想也许它会卡在
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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。