我正在研究Leetcode问题,但无法清除所有测试用例。 它说其中一种解决方案已超过时间限制
给出一个包含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) {
double average = -Double.MAX_VALUE;
double temp = -Double.MAX_VALUE;
for(int i=0;i<nums.length;i++)
{
int sum = 0;
int count = 0;
for(int j=i;j<nums.length;j++)
{
count ++;
sum += nums[j];
if(count ==k)
{
temp = (double)(sum)/k;
average = Math.max(temp,average);
}
}
}
return average;
}
}
我能够清除69/123个测试用例。但是失败的原因是超过了时间限制。
请帮助修复我的代码。
答案 0 :(得分:0)
您可以加快代码的速度。
例如:
class Solution {
public double findMaxAverage(int[] nums, int k) {
double average = -Double.MAX_VALUE;
double temp = -Double.MAX_VALUE;
int imax = nums.length-k;
int sum = 0;
for (int i = 0; i < imax; i++)
{
if (i == 0)
{
for (int j = 0; j < k; j++)
{
sum += nums[j];
}
}
else
{
sum += nums[i - 1 + k] - nums[i - 1];
}
average = Math.max((double)(sum)/k,average);
}
return average;
}
}