LeeCode240搜索二维矩阵(Java)(二分/思维)

题目链接: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;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43590593/article/details/113530188