Постановка задачи

Найдите среднее значение каждого подмассива из "K" смежных элементов в нем.

Привет, амигос, в этой статье мы рассмотрим один из наиболее часто задаваемых вопросов на собеседованиях по программированию и рассмотрим его решение с помощью двух основных подходов.

Во-первых, давайте разберемся с постановкой задачи

Рассмотрим массив как Array: [1, 3, 2, 6, -1, 4, 1, 8, 2], а K равен K=5

здесь нам нужно вычислить среднее значение подмассива, граничащего со значением K.

Таким образом, пример подмассива и его среднего значения будет

Для первых 5 чисел (подмассив из индекса 0–4) среднее значение равно: (1+3+2+6–1)/5 = 2,2.

Для второго числа 5 (подмассив из индекса 1–5) среднее значение равно: (3+2+6–1+4)/5 = 2,8.

так далее, тогда окончательный результат Output: [2.2, 2.8, 2.4, 3.6, 2.8]

Давайте рассмотрим его первый подход

здесь мы рассмотрим два основных подхода

Первый подход прост и прямолинеен, он суммирует все 5-элементные подмассивы данного массива и делит сумму на «5», чтобы найти среднее значение.

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

Приведенное выше решение простое, и это обычное решение, которое приходит всем на ум.

Итак, давайте попробуем подумать🤔 есть ли какой-либо другой доступный подход, который предоставит решение, и решение будет более оптимизированным?

Вышеприведенное решение содержит повторяющиеся шаги, и если мы вычислим его временную сложность, оно будет O(NK) где «N» — количество элементов во входном массиве.

Давайте посмотрим на его второй подход

Итак, есть ли какой-либо алгоритм или способ оптимизации решения? Если вы спросите меня, то ДА. Здесь мы будем использовать подход Sliding Window.

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

Здесь мы сдвинем окно на один элемент, когда перейдем к следующему подмассиву. Чтобы повторно использовать sum из предыдущего подмассива, мы вычтем элемент, выходящий из окна, и добавим элемент, который сейчас включается в скользящее окно. Это избавит нас от обхода всего подмассива в поисках sum и, как следствие, сложность алгоритма уменьшится до O(N).

Чтобы лучше понять, вот ссылка на видео