题目:
思路:
1、单靠对角线元素无法判定位置
2、主要逐行进行二分
代码:
public boolean searchMatrix(int[][] matrix, int target) {
int rows = matrix.length;
int columns = matrix[0].length;
// 按行进行二分
for (int i = 0; i < rows; i++) {
int left = 0, right = columns -1;
while (left <= right) {
int mid = left + (right -left) / 2; // 注意这里mid代表实际数组行下标,(right-left)/2只是相对左边界的位置,还需要left+才是数组下标
if (matrix[i][mid] == target) {
return true;
} else if (matrix[i][mid] > target) {
right = mid - 1; // 这里注意边界值,如果不-1,提交代码超出时间限制。二分都要注意边界
} else {
left = mid + 1;
}
}
}
return false;
}