编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0){
return false;
}
int start = 0;
int end = matrix.length - 1;
int mid1 = -1;
while(start <= end){
mid1 = start + (end - start) / 2;
if(matrix[mid1][0] == target){
return true;
}else if(matrix[mid1][0] < target){
start = mid1 + 1;
}else if(matrix[mid1][0] > target){
end = mid1 -1;
}
}
//mid1如果在中点右边,则换到左边,前提是mid1>=1
if(mid1 > 0){
if(matrix[mid1][0] > target){
mid1--;
}
}
start = 1;
end = matrix[0].length - 1;
int mid2 = -1;
while(start <= end){
mid2 = start + (end - start) / 2;
if(matrix[mid1][mid2] == target){
return true;
} else if(matrix[mid1][mid2] < target){
start = mid2 + 1;
}else if(matrix[mid1][mid2] > target){
end = mid2 -1;
}
}
return false;
}
}