Вопрос: Учитывая массив целых чисел и число 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”