Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: sliding window, two pointers, left pointer, right pointer, algorithm

В чём разница между указателем сдвига влево и вправо в алгоритме скользящего окна?

Вопрос проверяет понимание управления границами окна в алгоритме скользящего окна, что важно для оптимизации задач с подмассивами или подстроками.

Короткий ответ

Правый указатель расширяет окно, добавляя новые элементы, а левый — сужает окно, удаляя элементы. Обычно правый движется в цикле, а левый — по условию. Это позволяет поддерживать актуальное состояние окна без повторных проходов.

Длинный ответ

Основная идея скользящего окна

Алгоритм скользящего окна использует два указателя (левый и правый) для работы с непрерывной частью данных. Правый указатель отвечает за расширение окна — он добавляет новые элементы, двигаясь вперёд. Левый указатель сужает окно, удаляя элементы, когда текущее окно перестаёт удовлетворять условию задачи.

Разница в поведении

  • Правый указатель: всегда движется вперёд на каждой итерации, добавляя элемент в окно. Он отвечает за исследование новых данных.
  • Левый указатель: двигается только при необходимости, когда нужно уменьшить окно (например, сумма превысила лимит). Он сдвигается вправо, удаляя крайний левый элемент.

Пример кода

function maxSumSubarray(arr, k) {
  let left = 0, sum = 0, maxSum = 0;
  for (let right = 0; right < arr.length; right++) {
    sum += arr[right]; // правый расширяет окно
    if (right >= k - 1) {
      maxSum = Math.max(maxSum, sum);
      sum -= arr[left]; // левый сужает окно
      left++;
    }
  }
  return maxSum;
}

В этом примере правый указатель добавляет каждый элемент, а левый удаляет элемент, когда окно достигает размера k.

Вывод

Правый указатель всегда движется вперёд, расширяя окно, а левый — только по условию, сужая окно. Это позволяет эффективно решать задачи с подмассивами за O(n) времени.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#sliding window

#two pointers

#left pointer

#right pointer

#algorithm

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию