Binary Search on Matrix
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
int m = matrix.length, n = matrix[0].length;
int row = findRow(matrix, target, 0, m - 1);
int left = 0, right = n - 1;
while (left + 1 < right) {
int mid = left + (right - left) / 2;
if (matrix[row][mid] == target) {
return true;
} else if (matrix[row][mid] < target) {
left = mid;
} else {
right = mid;
}
}
return matrix[row][left] == target || matrix[row][right] == target;
}
private int findRow(int[][] matrix, int target, int top, int bottom) {
int last = matrix[0].length - 1;
while (top + 1 < bottom) {
int mid = top + (bottom - top) / 2;
if (matrix[mid][last] >= target) {
bottom = mid;
} else {
top = mid;
}
}
if (target <= matrix[top][last]) {
return top;
}
return bottom;
}Last updated