Рубрики
Без рубрики

Максимальная сумма subarray размера K, применение схемы скользящего окна

Вопрос: Учитывая массив целых чисел и число k, найдите максимальную сумму субрай размером K. E… С тегом JavaScript, интервью, карьерой, алгоритмами.

Вопрос: Учитывая массив целых чисел и число k, найдите максимальную сумму субрай k.

Например: для данного массива a [] = {10,30,20,50,60,40,40} размера, максимальная сумма subarray будет +.

Брусная сила: O (n*k) массива.

Решение грубой силы будет заключаться в том, чтобы генерировать все возможные субрай размера K и найти максимум среди этих субррей.

var maxSubarray = function(arr,k){
  let max = 0;
  for(let i=0;i max){
      max = tempMax;
    }
  }
  return max;
};

Теперь давайте подумаем об оптимизации. Давайте посмотрим, что мы на самом деле делаем на каждом шаге.

Let
A[] = [10,20,10,40,50,10,60]
K = 3

for index 0 : sum = 10 + 20 + 10 or index 0 + index 1 + index 2
for index 1 : sum = 20 + 10 + 40 or           index 1 + index 2 + index 3
for index 2 : sum = 10 + 40 + 50 or                     index 2 + index 3 + index 4
for index 3 : sum = 40 + 50 + 10 or                               index 3 + index 4 + index 5      

and so on..

Исходя из этого, мы видим, что на каждой итерации мы суммируем, добавляем элементы между индексом (i, i+k). Но также отмечаем, что на каждом этапе мы повторяем одни и те же шаги.

Так что, как вы можете видеть, мы повторяем те же шаги, так что теперь давайте подумаем о том, как мы можем избежать дублирования шагов, это приводит к нашему другому наблюдению тот

Для данного индекса I, [i] + a [i + 1] + a [i + 2] + … + a [i + k]; Для индекса I+1 [i+1]+a [i+2]+…+a [i+k]+a [i+k+1];

Итак, на каждой итерации i+1 , мы вычитаем [i] и добавляем [i+k+1].

И это, дамы и господа называют скользящее окно Где на каждом шаге мы добавляем следующий элемент и удаляем предыдущий элемент.

Давайте кодируем это!

var maxSubarray = function(arr,k){
  let max = 0;
  let windowSum = 0;
  let windowStart=0;
  for(let windowEnd=0;windowEnd=k-1){
        max = Math.max(windowSum,max);
        windowSum -= arr[windowStart];
        windowStart++;
      }
      console.log(windowSum,max);
  }
  return max;
};

Вот и все ! Теперь вы знаете, как увидеть шаблоны и решить наиболее часто задаваемый вопрос интервью. Ваше интервью будет похоже на:

Надеюсь, вы поняли и понравилось мое объяснение!

GitHub: https://github.com/akhilp96/data Структуры и algorithms/blob/master/problems/maximumsubarraysum.js

Оригинал: “https://dev.to/akhilpokle/maximum-sum-subarray-of-size-k-applying-sliding-window-pattern-59fa”