Search a 2D Matrix — Treat as 1D Sorted Array
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