leetcode 74 搜索二维矩阵
题意:在给定矩阵查找target,若矩阵中有target则返回true,否则返回false。矩阵行内元素递增且每行最后一个数都小于下一行的第一个数。
知识点:二分
解题思路:
思路一:由于矩阵的性质,我们可以先用二分确定目标数可能在哪一行,再在对应行内二分查找
思路二:若把矩阵的每一行拼到上一行末尾形成数组,则数组递增,我们可以直接二分,l=0,r=m*n-1,直接二分
注意的点
思路一中第一次二分查的是小于等于target的数(笔者第一次就写成了大于等于,这里注意二分写法不同含义)
完整代码(思路一)
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int n=matrix[0].length;
int m=matrix.length;
int l=0,r=m-1;
while(l<r){
int mid=(l+r+1)>>1;
if(matrix[mid][0]<=target)l=mid;
else r=mid-1;
}
if(matrix[l][0]==target)return true;
int ll=0,rr=n-1;
while(ll<rr){
int mid=(ll+rr)>>1;
if(matrix[l][mid]>=target)rr=mid;
else ll=mid+1;
}
if(matrix[l][ll]==target)return true;
return false;
}
}