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

题目所属分类

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

原题链接

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

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

在这里插入图片描述

代码案例:输入: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 ;
    }
}
posted @   依嘫  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示