AI EducademyAIEducademy
๐ŸŒณ

AI Foundations

๐ŸŒฑ
AI Seeds

Start from zero

๐ŸŒฟ
AI Sprouts

Build foundations

๐ŸŒณ
AI Branches

Apply in practice

๐Ÿ•๏ธ
AI Canopy

Go deep

๐ŸŒฒ
AI Forest

Master AI

๐Ÿ”จ

AI Mastery

โœ๏ธ
AI Sketch

Start from zero

๐Ÿชจ
AI Chisel

Build foundations

โš’๏ธ
AI Craft

Apply in practice

๐Ÿ’Ž
AI Polish

Go deep

๐Ÿ†
AI Masterpiece

Master AI

๐Ÿš€

Career Ready

๐Ÿš€
Interview Launchpad

Start your journey

๐ŸŒŸ
Behavioral Mastery

Master soft skills

๐Ÿ’ป
Technical Interviews

Ace the coding round

๐Ÿค–
AI & ML Interviews

ML interview mastery

๐Ÿ†
Offer & Beyond

Land the best offer

View All Programsโ†’

Lab

7 experiments loaded
๐Ÿง Neural Network Playground๐Ÿค–AI or Human?๐Ÿ’ฌPrompt Lab๐ŸŽจImage Generator๐Ÿ˜ŠSentiment Analyzer๐Ÿ’กChatbot Builderโš–๏ธEthics Simulator
๐ŸŽฏMock InterviewEnter the Labโ†’
JourneyBlog
๐ŸŽฏ
About

Making AI education accessible to everyone, everywhere

โ“
FAQ

Common questions answered

โœ‰๏ธ
Contact

Get in touch with us

โญ
Open Source

Built in public on GitHub

Get Started
AI EducademyAIEducademy

MIT Licence. Open Source

Learn

  • Academics
  • Lessons
  • Lab

Community

  • GitHub
  • Contribute
  • Code of Conduct
  • About
  • FAQ

Support

  • Buy Me a Coffee โ˜•
  • Terms of Service
  • Privacy Policy
  • Contact
AI & Engineering Academicsโ€บโœ๏ธ AI Sketchโ€บLessonsโ€บBinary Search Patterns
๐Ÿ”
AI Sketch โ€ข Intermediateโฑ๏ธ 17 min read

Binary Search Patterns

Classic Binary Search - A Quick Review

Binary search halves the search space each step. On a sorted array of n elements it finds a target in O(log n) time.

def binary_search(nums, target):
    lo, hi = 0, len(nums) - 1
    while lo <= hi:
        mid = (lo + hi) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            lo = mid + 1
        else:
            hi = mid - 1
    return -1

Simple - but the real power of binary search goes far beyond sorted arrays.

The Search Space Concept

Binary search works whenever you have a monotonic condition over a range. The "array" doesn't even need to exist - you just need a range [lo, hi] and a function that flips from False to True (or vice versa) at some boundary.

Search space:  [lo .................. hi]
Condition:      F  F  F  F  T  T  T  T
                          ^-- answer
๐Ÿคฏ
Binary search was first published in 1946, but the first bug-free version wasn't written until 1962 - 16 years of off-by-one errors!

Binary Search on Answer

Instead of searching an array, search the answer space. Ask: "Can I achieve result X?" If yes, try smaller; if no, try larger.

Example: Koko Eating Bananas

Koko has n piles of bananas and h hours. Find the minimum eating speed so she finishes in time.

def min_speed(piles, h):
    lo, hi = 1, max(piles)
    while lo < hi:
        mid = (lo + hi) // 2
        hours = sum((p + mid - 1) // mid for p in piles)
        if hours <= h:
            hi = mid      # speed works, try slower
        else:
            lo = mid + 1  # too slow, go faster
    return lo

The answer space is [1, max(piles)] and the condition is monotonic - higher speed always means fewer hours.

Binary search narrowing the answer space for minimum eating speed
Binary search on answer: narrow the feasible speed range each iteration.
Lesson 7 of 100% complete
โ†Heaps and Priority Queues

Discussion

Sign in to join the discussion

Suggest an edit to this lesson

Rotated Sorted Array

A sorted array rotated at some pivot: [4, 5, 6, 7, 0, 1, 2]. One half is always sorted. Compare mid with lo to decide which half, then check if the target falls in the sorted half.

[4, 5, 6, 7, 0, 1, 2]
 L        M        R
Left half [4..7] is sorted.
Target 1 not in [4..7] โ†’ search right.
๐Ÿง Quick Check

In a rotated sorted array [3,4,5,1,2], which half is sorted when mid=2 (value 5)?

First and Last Occurrence

To find the first occurrence, when you hit the target, don't stop - set hi = mid and keep searching left. For the last, set lo = mid + 1 and search right.

This pair of searches also gives you the count of a target: last - first + 1.

Peak Element

An element larger than both neighbours. Even in an unsorted array, binary search works: if nums[mid] < nums[mid + 1], the peak is to the right; otherwise it's to the left. O(log n).

๐Ÿค”
Think about it:Why does peak-finding work with binary search even though the array isn't sorted? What property replaces sorted order here?

Search in a 2D Matrix

If rows are sorted and the first element of each row is greater than the last of the previous, treat the matrix as a single sorted array of m ร— n elements. Map index k to row k // n, column k % n.

Square Root Without a Library

Find the largest integer x where x * x โ‰ค n. Search space: [0, n]. Classic binary search on answer.

def sqrt(n):
    lo, hi = 0, n
    while lo <= hi:
        mid = (lo + hi) // 2
        if mid * mid <= n:
            lo = mid + 1
        else:
            hi = mid - 1
    return hi

The "Minimise the Maximum" Pattern

Problems like "split array largest sum" or "capacity to ship packages within D days" ask you to minimise the worst case. The answer is monotonic: if capacity C works, so does C+1. Binary search on C.

๐Ÿง Quick Check

For 'Capacity to Ship Packages in D Days', what is the search space for binary search?

The Universal Template

lo, hi = min_possible, max_possible
while lo < hi:
    mid = (lo + hi) // 2
    if condition(mid):
        hi = mid        # mid works, try smaller
    else:
        lo = mid + 1    # mid fails, need larger
return lo

Adjust hi = mid vs lo = mid depending on whether you seek the first True or last True.

๐Ÿง Quick Check

What is the time complexity of binary search on an answer space of size S with an O(n) feasibility check?

๐Ÿค”
Think about it:When you see the phrase "minimum possible maximum" or "maximum possible minimum" in a problem statement, what should immediately come to mind?

๐Ÿ“š Further Reading

  • NeetCode - Binary Search playlist - curated problems from easy to hard
  • Tech Interview Handbook - Binary Search - patterns, tips and pitfalls
  • LeetCode Binary Search study plan - progressive problem set