Skip to content
BytePatterns

Binary Search on Answer

Searching: lesson 5 of 8

No sorted array? Binary search the answer range.

Lesson 5 of 8 · 6 min

Binary Search on Answer

Step 1 of 9

No array to search — instead search the answers: every van capacity from 4 to 15.

The Idea

Some problems hand you no array to search, but their answers still have order: if a value works, every larger value works too. Binary search that range of candidate answers, using a feasibility check in place of a comparison.

Real-World Example

Picking the smallest delivery van that clears the day's orders in the allowed number of trips. You do not measure every van, you try a mid-size one, see whether it fits, and halve the catalogue from there.

The Code

def min_capacity(weights, trips):
    def fits(cap):
        used, load = 1, 0
        for w in weights:
            if load + w > cap:      # start a new trip
                used, load = used + 1, 0
            load += w
        return used <= trips
    lo, hi = max(weights), sum(weights)
    while lo < hi:
        mid = (lo + hi) // 2
        if fits(mid): hi = mid      # try something smaller
        else:         lo = mid + 1
    return lo
# min_capacity([3, 2, 2, 4, 1, 4], 3) -> 6

Python

Your turn

Fill in the blank.

lo, hi = 1, 100
while lo < hi:
  mid = (lo + hi) // 2
  # mid works, so nothing larger is needed
  if fits(mid):
      hi = ___
  else:
      lo = mid + 1

Mini quiz

1 / 3

Binary search on the answer needs the feasibility check to be:

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.