Sobes.tech
Back to questions
Senior
2

Как двигать окно в алгоритме sliding window?

Companies where asked
Яндекс

Answer from AI

sobes.tech AI

В алгоритме sliding window окно двигается, чтобы эффективно обрабатывать подмножества данных без повторного обхода всего массива.

Основные способы сдвига окна:

  1. Фиксированный размер окна:

    • Окно сдвигается на один элемент вправо, удаляя самый левый элемент и добавляя следующий справа.
  2. Переменный размер окна:

    • Левый и правый указатели (границы окна) двигаются независимо, расширяя или сужая окно в зависимости от условий задачи.

Пример на Go для подсчёта суммы подмассива фиксированного размера:

func slidingWindowSum(arr []int, k int) []int {
    if len(arr) < k {
        return nil
    }
    sums := make([]int, 0, len(arr)-k+1)
    windowSum := 0
    for i := 0; i < k; i++ {
        windowSum += arr[i]
    }
    sums = append(sums, windowSum)
    for i := k; i < len(arr); i++ {
        windowSum += arr[i] - arr[i-k]
        sums = append(sums, windowSum)
    }
    return sums
}

Здесь окно двигается на один элемент, обновляя сумму за O(1) вместо пересчёта всей суммы.