【问题标题】:Maximum Average Subarray I, Leetcode. Time Limit Exceeded最大平均子数组 I,Leetcode。超过时间限制
【发布时间】:2021-02-10 07:54:54
【问题描述】:

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

【问题讨论】:

    标签: arrays max average sub-array


    【解决方案1】:
    • 我猜它可能会卡在whiles 之一。

    • 我们可以解决问题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;
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2022-07-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多