思路:
矩阵从左到右从上到下单调,可以将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,再利用二分查找。
题解:
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int m = matrix.length,n = matrix[0].length;
int lo = 0, hi = m * n - 1;
while (lo <= hi){
//被查找的键要么不存在,要么必然存在于a[lo..high]之中
int mid =lo + (hi - lo) / 2;
int x = matrix[mid / n][mid % n];
//先将被查找的键于中间键比较
if (x < target){//如果大于中间键则在右半部分查找
lo = mid + 1;
}else if(x >target){//如果小于中间键则在左半部分查找
hi = mid - 1;
}else{
return true;
}
}
return false;
}
}