Binary Search
Binary search is a divide-and-conquer algorithm that efficiently searches sorted data or finds optimal values in monotonic search spaces. It reduces O(n) problems to O(log n) by eliminating half the search space in each iteration.Key Patterns & Techniques
1. Classic Binary Search
- Search for target in sorted array
- Find insertion position
- Find first/last occurrence
2. Search Space Binary Search
- Search on answer space, not array indices
- Used for optimization problems
- Examples: capacity, speed, minimum/maximum values
3. Binary Search on Matrix
- 2D sorted matrix treated as 1D
- Row-wise or column-wise binary search
- Both dimensions sorted
4. Find Peak/Boundary
- Find local maximum/minimum
- Find transition point in boolean array
- Rotated sorted array search
Common Approaches
Classic Binary Search Template
Find First/Last Occurrence
Binary Search on Answer Space
Find Peak Element
Problems in This Category
010. Find Peak Element
Medium | Frequency: 82.9%Binary search to find local maximum in O(log n) time.
042. Find First and Last Position
Medium | Frequency: 59.4%Two binary searches to find both boundaries of target.
094. Koko Eating Bananas
Medium | Frequency: 32.0%Binary search on eating speed (answer space), not array indices.
079. Capacity To Ship Packages
Medium | Frequency: 40.7%Binary search on ship capacity to minimize maximum weight.
074. Cutting Ribbons
Medium | Frequency: 40.7%Binary search on cut length to maximize size with k pieces.
041. Kth Missing Positive Number
Easy | Frequency: 59.4%Binary search to find kth missing number efficiently.
084. Kth Smallest Element in Sorted Matrix
Medium | Frequency: 40.7%Binary search on value range, count elements ≤ mid.
100. Median of Two Sorted Arrays
Hard | Frequency: 32.0%Binary search on partition point for O(log(min(m,n))) solution.
Complexity Characteristics
| Pattern | Time Complexity | Space Complexity | When to Use |
|---|---|---|---|
| Classic Search | O(log n) | O(1) | Find element in sorted array |
| First/Last Occurrence | O(log n) | O(1) | Find boundaries of target |
| Answer Space | O(n log m) | O(1) | Optimization problems, m = search range |
| 2D Matrix | O(log(m*n)) | O(1) | Sorted matrix search |
| Peak Finding | O(log n) | O(1) | Local max/min in array |
Interview Tips
Pattern Recognition
- “Sorted array” → Consider binary search
- “Find minimum/maximum capacity/speed/size” → Binary search on answer
- “In O(log n) time” → Almost certainly binary search
- “Sorted matrix” → Binary search with coordinate mapping
- “Find peak/local maximum” → Binary search on gradient
- “Minimize the maximum” or “Maximize the minimum” → Binary search on answer
Common Mistakes
- Using
(left + right) / 2causing integer overflow (useleft + (right - left) // 2) - Wrong loop condition:
while left <= rightvswhile left < right - Off-by-one errors when updating
leftandright - Not handling duplicates correctly in first/last occurrence
- Infinite loop when not moving pointers correctly
Key Insights
- Search space must be monotonic - as you increase/decrease, property changes predictably
- Choose correct loop invariant -
left <= rightreturns -1,left < rightreturns left - Answer space pattern check if mid works, then search left or right
- Ceiling division use
(a + b - 1) // binstead ofmath.ceil(a/b) - Finding boundaries after finding target, keep searching in direction of boundary
Binary Search Templates
Template 1: Exact Match
Template 2: Find Boundary
Template 3: Find in Range
Decision Tree
Advanced Patterns
Rotated Sorted Array
Binary Search on 2D Matrix
Pro Tip: If you can frame the problem as “find the minimum/maximum value such that condition(value) is true”, you can use binary search on the answer space. The key is recognizing monotonicity.