最大平均子数组I,Leetcode。超过时间限制

时间:2020-10-27 23:53:56

标签: arrays max average sub-array

此问题来自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;
    }
}

1 个答案:

答案 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;

    }
}