Search a Sorted 2D Matrix
Problem
An m × n matrix has every row sorted left-to-right and the first cell of each row is greater than the last cell of the previous row — so reading it row-by-row gives one fully sorted sequence of length m·n. Decide whether a target value lives somewhere in the matrix.
Input
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 11Output
trueImagine the matrix flattened: index k maps to row = ⌊k/n⌋, col = k mod n. Binary-search k in [0, m·n − 1].
def search_matrix(matrix, target):
m, n = len(matrix), len(matrix[0])
lo, hi = 0, m * n - 1
while lo <= hi:
mid = (lo + hi) // 2
v = matrix[mid // n][mid % n]
if v == target: return True
if v < target: lo = mid + 1
else: hi = mid - 1
return False
function searchMatrix(matrix, target) {
const m = matrix.length, n = matrix[0].length;
let lo = 0, hi = m * n - 1;
while (lo <= hi) {
const mid = (lo + hi) >> 1;
const v = matrix[(mid / n) | 0][mid % n];
if (v === target) return true;
if (v < target) lo = mid + 1; else hi = mid - 1;
}
return false;
}
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int lo = 0, hi = m * n - 1;
while (lo <= hi) {
int mid = (lo + hi) >>> 1;
int v = matrix[mid / n][mid % n];
if (v == target) return true;
if (v < target) lo = mid + 1; else hi = mid - 1;
}
return false;
}
}
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size(), n = matrix[0].size();
int lo = 0, hi = m * n - 1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
int v = matrix[mid / n][mid % n];
if (v == target) return true;
if (v < target) lo = mid + 1; else hi = mid - 1;
}
return false;
}