题目链接:LeeCode240搜索二维矩阵
题目描述:
这题是我一生之敌,上来想都没想我就开始深搜,深搜发现不行,我这聪明的小脑袋瓜直接就开始广搜,全t了,然后暴力遍历了一遍数组,过了。。。然后就想硬遍历都能过那就加个二分,对每层二分,有两点不用进行二分
1.当前行最后一个数小于target
2.当前行第一个数大于target
于是就有了第一个写法
class Solution {
public static boolean searchMatrix(int[][] matrix, int target) {
boolean flag=false;
for (int i = 0; i < matrix.length; i++) {
if(matrix[i][matrix[0].length-1]<target)continue;
if(matrix[i][0]>target)return flag;
if(!flag){
flag=binarysearch(matrix[i],0, matrix[0].length-1, target);
}
}
return flag;
}
public static boolean binarysearch(int[] num,int l,int r,int target){
while(l<=r){
int mid=(l+r)/2;
if(num[mid]>target)r=mid-1;
else if(num[mid]<target)l=mid+1;
else return true;
}
return false;
}
}
过了之后就感觉有点梦幻,然后就想看看大佬们怎么做的,有一个解法给我秀蒙了
取右上角为起点,如果当前数比target小就向下,比target大就向左。找到返回true,找不到返回false
class Solution {
public static boolean searchMatrix(int[][] matrix, int target) {
int x=0,y=matrix[0].length-1;
while(x< matrix.length&&x>=0&&y>=0&&y<matrix[0].length){
if(matrix[x][y]<target)x++;
else if(matrix[x][y]>target)y--;
else return true;
}
return false;
}
}