题目传送地址: ​​https://leetcode.cn/problems/search-a-2d-matrix/​

运行效率

Leetcode74. 搜索二维矩阵_二分法


代码如下:

class Solution {
public static boolean searchMatrix(int[][] matrix, int target) {
int row; //target所在的行
//处理边界情况
if (target > matrix[matrix.length - 1][0]) {
if (target > matrix[matrix.length - 1][matrix[0].length - 1]) {
return false;
} else {
row = matrix.length - 1;
}
}
//先用二分法确定目标值 可能所在的行
int left = 0;
int right = matrix.length;
while (left != right) {
int mid = (left + right) / 2;
if (target == matrix[mid][0]) {
return true;
}
if (target > matrix[mid][0]) {
if(left==mid){ //如果left指针和right指针遇到了就可以跳出循环
break;
}
left = mid;
}
if (target < matrix[mid][0]) {
if(right==mid){ //如果left指针和right指针遇到了就可以跳出循环
break;
}
right = mid;
}
}
row = left;

//再用二分法确定目标值 可能所在的列
left = 0;
right = matrix[0].length;
while (left != right) {
int mid = (left + right) / 2;
if (target == matrix[row][mid]) {
return true;
}
if (target > matrix[row][mid]) {
if(left==mid){ //如果left指针和right指针遇到了就可以跳出循环
break;
}
left = mid;
}
if (target < matrix[row][mid]) {
if(right==mid){ //如果left指针和right指针遇到了就可以跳出循环
break;
}
right = mid;
}
}
return false;
}
}