描述
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
分析
思路一:可以通过左下角或者右上角一点一点缩小范围,最后确定这个数或者越界跳出循环
思路二:把二维数组看作是一维数组,left,right,mid按照一维数组的下标取值,在确定mid的值是多少时可以把一维坐标转成二维坐标。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int r = m*n-1, l = 0;
while(l <= r){
int mid = (r - l) / 2 + l;
int tmp = matrix[mid/n][mid%n];
if(tmp == target){
return true;
}else if (tmp < target){
l = mid + 1;
}else {
r = mid - 1;
}
}
return false;
}
}