Two Pointers (Два указателя)

Когда применять:

  • Массив отсортирован (поиск пары, суммы).
  • Нужно развернуть массив/строку.
  • Палиндромы.
  • Слияние двух отсортированных массивов.
  • Удаление элементов in-place.

Вариант A: С двух концов (Opposite ends)

Задача: Найти пару с суммой K в сортированном массиве / проверить палиндром.

let left = 0, right = nums.length - 1;
while (left < right) {
  const sum = nums[left] + nums[right];
  if (sum === target) return [left, right];
  if (sum < target) left++; // Мало? Увеличиваем левое
  else right--;             // Много? Уменьшаем правое
}

Вариант B: Быстрый и медленный (Fast & Slow)

Задача: Цикл в Linked List, удаление дубликатов in-place, перемещение нулей.

// Удаление дублей (sorted array)
let slow = 0;
for (let fast = 1; fast < nums.length; fast++) {
  if (nums[fast] !== nums[slow]) {
    slow++;
    nums[slow] = nums[fast];
  }
}
return slow + 1;

Практика