Максимальный средний подмассив I, Leetcode. Превышен лимит времени

#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:

  • Я думаю, может быть, он застрянет в одном из while s.

  • Мы можем решить проблему 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;

    }
}