1. Binary Search in Row-wise & Column-wise Sorted Matrix
Problem:
Matrix is sorted row-wise and column-wise. Search for a target in O(m+n) or O(log(m*n)).
Example:
matrix = [
  [1, 4, 7, 11],
  [2, 5, 8, 12],
  [3, 6, 9, 16]
]
target = 5 → Output: true
1.1 Flatten 2D Matrix to 1D
Treat the matrix as a 1D sorted array:
public boolean searchMatrix(int[][] matrix, int target) {
    int n = matrix.length;
    int m = matrix[0].length;
    int low = 0, high = n*m - 1;
    while (low <= high) {
        int mid = low + (high - low)/2;
        int val = matrix[mid/m][mid%m];
        if (val == target) return true;
        else if (val < target) low = mid + 1;
        else high = mid - 1;
    }
    return false;
}
Time Complexity: O(log(m*n))
Space Complexity: O(1)
1.2 Staircase Search (O(m+n))
Start from top-right corner:
public boolean searchMatrixStaircase(int[][] matrix, int target) {
    int row = 0, col = matrix[0].length - 1;
    while (row < matrix.length && col >= 0) {
        if (matrix[row][col] == target) return true;
        else if (matrix[row][col] > target) col--;
        else row++;
    }
    return false;
}
2. Search in Infinite / Unknown Size Array
Problem: Array size unknown. Find target in O(log n).
Approach:
- Exponentially expand search range: 
low = 0, high = 1, 2, 4, 8...untilarr[high] >= target. - Apply normal binary search in 
[low, high]. 
public int searchInfiniteArray(ArrayReader reader, int target) {
    int low = 0, high = 1;
    while (reader.get(high) < target) {
        low = high;
        high = high * 2;
    }
    return binarySearch(reader, low, high, target);
}
Note: ArrayReader.get(index) returns large value if out of bounds.
3. Ternary Search for Unimodal Functions
Problem: Function f(x) first increases then decreases. Find maximum value.
Template:
double left = 0, right = 1000;
while (right - left > 1e-6) {
    double mid1 = left + (right - left)/3;
    double mid2 = right - (right - left)/3;
    if (f(mid1) < f(mid2)) left = mid1;
    else right = mid2;
}
return f(left); // maximum value
Use Case: Optimization problems, like finding peak in mountain array or maximizing profit.
4. Edge Cases & Tips
- For matrix search, always check 
matrix.lengthandmatrix[0].length. - Infinite array search: ensure exponential expansion does not overflow integer.
 - Ternary search: stop condition depends on required precision.
 - 
2D to 1D mapping: 
row = mid / cols, col = mid % cols. 
5. Problems to Practice
- LeetCode 74: Search a 2D Matrix
 - LeetCode 240: Search a 2D Matrix II
 - LeetCode 275: H-Index II
 - LeetCode 852: Peak Index in a Mountain Array
 - Infinite array search variants (GeeksforGeeks)
 
✅ Blog 4 Summary:
- Binary search in 2D matrices (flattened or staircase search)
 - Infinite / unknown-size array search
 - Ternary search for unimodal functions
 - Java implementation with edge cases
 
Next in Series — Blog 5
Binary Search Patterns Cheat Sheet & Edge Cases
- Consolidation of all patterns
 - Overflow-safe mid calculations
 - Low/high boundary handling
 - First/last occurrence edge cases
 - Complete reference Java snippets
 
    
Top comments (0)