Skip to content
BytePatterns

Binary Search Variants

Searching: lesson 3 of 8

Don't just find it. Find the first one that qualifies.

Lesson 3 of 8 · 6 min

Binary Search Variants

Step 1 of 8

Three 3s here. Plain binary search may return any of them — we want the first.

The Idea

Interview problems rarely want any match; they want the first or the last one. So instead of returning on a hit, record it and keep shrinking toward that side. What you get back is a boundary, not an arbitrary index.

Real-World Example

Scanning a cinema's sorted showtimes for the first screening after 7pm. Landing on a 7:30 showing is not the answer yet, because you still have to check earlier and make sure no 7:05 slot exists.

The Code

def first_at_least(nums, target):
    lo, hi, answer = 0, len(nums) - 1, -1
    while lo <= hi:
        mid = (lo + hi) // 2
        if nums[mid] >= target:
            answer = mid      # a candidate...
            hi = mid - 1      # ...but look further left
        else:
            lo = mid + 1
    return answer

print(first_at_least([1, 3, 3, 3, 7], 3))   # 1

Python

Your turn

What does this print?

nums = [2, 4, 4, 6]
lo, hi, ans = 0, 3, -1
while lo <= hi:
  mid = (lo + hi) // 2
  if nums[mid] >= 4:  ans, hi = mid, mid - 1
  else:               lo = mid + 1
print(ans)

Mini quiz

1 / 3

To find the FIRST index satisfying a condition, after a hit you:

New lessons land every few weeks

Leave an address and we will tell you when the next one is up. That is the only reason we will use it.

One address, stored so we can email you. Nothing else, ever.