Search a 2D Matrix — Treat as 1D Sorted Array

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 312 · Search a 2D Matrix

Difficulty: Medium · Pattern: 2D → 1D Binary Search

Rows sorted, each row's first element > last row's last element.

Solutions

# Python
def searchMatrix(matrix, target):
    m, n = len(matrix), len(matrix[0])
    lo, hi = 0, m*n-1
    while lo <= hi:
        mid = (lo+hi)//2
        val = matrix[mid//n][mid%n]
        if val == target: return True
        elif val < target: lo = mid+1
        else: hi = mid-1
    return False
// Java
public boolean searchMatrix(int[][] matrix, int target) {
    int m=matrix.length, n=matrix[0].length, lo=0, hi=m*n-1;
    while (lo<=hi) {
        int mid=lo+(hi-lo)/2, val=matrix[mid/n][mid%n];
        if (val==target) return true;
        else if (val<target) lo=mid+1; else hi=mid-1;
    }
    return false;
}
// C++
bool searchMatrix(vector<vector<int>>& matrix, int target) {
    int m=matrix.size(), n=matrix[0].size(), lo=0, hi=m*n-1;
    while (lo<=hi) {
        int mid=lo+(hi-lo)/2, val=matrix[mid/n][mid%n];
        if (val==target) return true;
        else if (val<target) lo=mid+1; else hi=mid-1;
    }
    return false;
}

Complexity

  • Time: O(log(m*n))
  • Space: O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro