DEV Community

Abhishek Gupta
Abhishek Gupta

Posted on

🧠 Binary Search: 0 Monster Guide (JavaScript, Simple Words)

If binary search ever felt confusing, it’s not because it’s hardβ€”it’s because it’s taught in pieces.

This guide will take you from:
πŸ‘‰ absolute beginner
πŸ‘‰ to solving advanced interview problems

No fluff. Just clear thinking + simple JS code.


πŸš€ 0. What You MUST Know First

πŸ‘‰ Binary search ONLY works on sorted arrays

If the array is not sorted β†’ ❌ don’t use binary search


πŸ” 1. Core Idea (Super Simple)

Instead of checking every number:

πŸ‘‰ Go to the middle
πŸ‘‰ Decide:

  • go LEFT
  • go RIGHT

Repeat.


🧩 2. Basic Binary Search

πŸ‘‰ Find if a number exists

function binarySearch(arr, target) {
  let low = 0, high = arr.length - 1;

  while (low <= high) {
    let mid = Math.floor((low + high) / 2);

    if (arr[mid] === target) return mid;

    if (arr[mid] < target) {
      low = mid + 1; // go right
    } else {
      high = mid - 1; // go left
    }
  }

  return -1;
}
Enter fullscreen mode Exit fullscreen mode

🧠 3. The ONLY Thing You Need to Master

πŸ‘‰ Direction decision:

  • arr[mid] < target β†’ go RIGHT
  • arr[mid] > target β†’ go LEFT

Everything else = variation of this


πŸ“ 4. First Occurrence (Leftmost)

πŸ‘‰ When duplicates exist

Example:

[1, 2, 2, 2, 3]
        ↑ want THIS one
Enter fullscreen mode Exit fullscreen mode
function firstOccurrence(arr, target) {
  let low = 0, high = arr.length - 1;
  let ans = -1;

  while (low <= high) {
    let mid = Math.floor((low + high) / 2);

    if (arr[mid] === target) {
      ans = mid;
      high = mid - 1; // go left again
    } else if (arr[mid] < target) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }

  return ans;
}
Enter fullscreen mode Exit fullscreen mode

πŸ‘‰ Rule: found β†’ still go LEFT


πŸ“ 5. Last Occurrence (Rightmost)

function lastOccurrence(arr, target) {
  let low = 0, high = arr.length - 1;
  let ans = -1;

  while (low <= high) {
    let mid = Math.floor((low + high) / 2);

    if (arr[mid] === target) {
      ans = mid;
      low = mid + 1; // go right again
    } else if (arr[mid] < target) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }

  return ans;
}
Enter fullscreen mode Exit fullscreen mode

πŸ‘‰ Rule: found β†’ still go RIGHT


πŸ“Š 6. Lower Bound (first β‰₯ target)

πŸ‘‰ First number β‰₯ target

function lowerBound(arr, target) {
  let low = 0, high = arr.length;

  while (low < high) {
    let mid = Math.floor((low + high) / 2);

    if (arr[mid] < target) {
      low = mid + 1;
    } else {
      high = mid;
    }
  }

  return low;
}
Enter fullscreen mode Exit fullscreen mode

πŸ“Š 7. Upper Bound (first > target)

πŸ‘‰ First number > target

function upperBound(arr, target) {
  let low = 0, high = arr.length;

  while (low < high) {
    let mid = Math.floor((low + high) / 2);

    if (arr[mid] <= target) {
      low = mid + 1;
    } else {
      high = mid;
    }
  }

  return low;
}
Enter fullscreen mode Exit fullscreen mode

πŸ” 8. One Template to Rule Them All

πŸ‘‰ Instead of memorizing everything:

while (low <= high) {
  let mid = Math.floor((low + high) / 2);

  if (condition) {
    high = mid - 1; // go left
  } else {
    low = mid + 1;  // go right
  }
}
Enter fullscreen mode Exit fullscreen mode

πŸ‘‰ Just change the condition


πŸ”₯ 9. Binary Search on Answer (GAME CHANGER)

πŸ‘‰ Not searching array
πŸ‘‰ Searching answer range


πŸ’‘ Example Thinking

Question:
πŸ‘‰ Minimum speed to finish work?

Search space:

low = 1
high = max possible
Enter fullscreen mode Exit fullscreen mode

🧠 Pattern:

function searchAnswer(low, high) {
  let ans = -1;

  while (low <= high) {
    let mid = Math.floor((low + high) / 2);

    if (isPossible(mid)) {
      ans = mid;
      high = mid - 1; // try better
    } else {
      low = mid + 1;
    }
  }

  return ans;
}
Enter fullscreen mode Exit fullscreen mode

πŸ’₯ 10. REAL SECRET (Most Important Insight)

Binary search is NOT about arrays.

πŸ‘‰ It is about finding a boundary

Example:

F F F F T T T
        ↑ answer
Enter fullscreen mode Exit fullscreen mode

πŸ‘‰ Find first TRUE


⚠️ 11. Common Mistakes

❌ Using on unsorted array
❌ Infinite loop (wrong condition)
❌ Forgetting edge cases
❌ Confusing < vs <=


πŸ§ͺ 12. Practice Problems (Must Do)

Start easy β†’ go hard:

  1. Find element
  2. First & Last position
  3. Count occurrences
  4. Search in rotated array
  5. Peak element
  6. Koko Eating Bananas
  7. Aggressive Cows

Top comments (0)