Two Pointer Technique — Algoritma

Two Pointer menggunakan dua pointer yang bergerak menuju satu sama lain (atau searah) untuk mengurangi kompleksitas dari O(n²) jadi O(n). Pola 1: Converging poi

Two Pointer menggunakan dua pointer yang bergerak menuju satu sama lain (atau searah) untuk mengurangi kompleksitas dari O(n²) jadi O(n).

Pola 1: Converging pointers (dari dua ujung)

// Two Sum di sorted array — O(n)
function twoSum(arr, target) {
  let left = 0;
  let right = arr.length - 1;

  while (left < right) {
    const sum = arr[left] + arr[right];
    if (sum === target) return [left, right];
    if (sum < target) left++;
    else right--;
  }
  return null;
}

twoSum([1, 3, 5, 7, 11], 12); // [1, 4] → 3 + 11 = 14...

Pola 2: Fast & slow pointer

// Cek palindrome — O(n)
function isPalindrome(str) {
  let left = 0;
  let right = str.length - 1;

  while (left < right) {
    if (str[left] !== str[right]) return false;
    left++;
    right--;
  }
  return true;
}

isPalindrome("racecar"); // true
isPalindrome("hello");   // false

Pola 3: Remove duplicates in-place

function removeDuplicates(arr) {
  if (arr.length === 0) return 0;
  let slow = 0;

  for (let fast = 1; fast < arr.length; fast++) {
    if (arr[fast] !== arr[slow]) {
      slow++;
      arr[slow] = arr[fast];
    }
  }
  return slow + 1; // Jumlah elemen unik
}

const a = [1, 1, 2, 2, 3, 4, 4];
removeDuplicates(a); // 4 → [1, 2, 3, 4, ...]

Kapan pakai Two Pointer?

🎭 Analogi sehari-hari: Two Pointer = dua tangan kamu di buku resep. Tangan kiri di awal, kanan di akhir. Cari resep dengan total halaman tertentu? Kamu mendekati tengah dari dua sisi. Ketemu? Done. Belum? Geser yang lebih kecil ke kanan, atau yang lebih besar ke kiri. 2 langkah lebih efisien dari 1 sambil keliling.

💡 Mengapa Two Pointer jadi O(n) bukan O(n²)? Setiap iterasi, salah satu pointer pasti maju. Tidak ada nested loop yang me-reset. Total langkah max = n (kiri) + n (kanan) = O(n). Insight: gerakan satu arah dengan kondisi monoton.

⚠️ Jebakan umum:

🎯 Pola "ini pakai Two Pointer":

🧪 Tebakan cepat: Two Sum sorted [1,3,5,7,11], target 12. Left=0, Right=4. 1+11=12 → ketemu! 1 step. Brute force? Up to 10 pairs check. Two pointer menang.

TL;DR: Two Pointer = 2 cursor bergerak satu arah, mengubah O(n²) jadi O(n). Wajib data sorted (atau monotonic). Klasik untuk: pair search, palindrome, in-place dedup, reverse.

Yang akan kamu pelajari