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;