leetcode 74. 搜索二维矩阵-java实现

题目所属分类

由于是升序 优先二分
一维坐标转换成二维坐标的话 mid/m mid %m

原题链接

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

leetcode 74. 搜索二维矩阵-java实现_第1张图片

代码案例:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

题解

我们可以想象把整个矩阵,按行展开成一个一维数组,那么这个一维数组单调递增,然后直接二分即可。
二分时可以通过整除和取模运算得到二维数组的坐标。

时间复杂度分析:二分的时间复杂度是 O(logn^2)=O(logn)

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int n = matrix.length ;
        int m = matrix[0].length;
        if(n == 0 || m == 0 ) return false;
        int l = 0 ; int r = n*m - 1;
        while(l < r){
            int mid = (l+r)>>1 ;
            if( matrix[mid/m][mid%m] >= target) r = mid ;
            else l = mid+1;
        }
        return matrix[r/m][r%m] == target ;
    }
}

你可能感兴趣的:(LeetCode,leetcode,矩阵,算法)