64、二分-搜索二维矩阵

思路:

通过使用二分方式,对于每行进行二分,因为每行的最后一个数小于下一行的第一个数,我们就可以依次二分。首先取出行数N,然后从0-N进行二分,如果mid最后一个数小于目标值说明0-mid中没有,舍弃,从mid+1到N-1行进行寻找。然后在进行二分直到找到或者便利完为止。代码如下:

java 复制代码
class Solution {
   public boolean searchMatrix(int[][] matrix, int target) {
        if (matrix==null||matrix.length==0||matrix[0].length==0){
            return false;
        }
        
        int N=matrix.length;
        int M=matrix[0].length;
        //每一行都是递增序列
        //每一行第一个数都是大于前一行最后一个数===>每一列都是递增  每一列的数都是大于前一行任意数
        return process(matrix,M,0,N-1,target);
    }

    private boolean process(int[][] matrix, int M, int L, int R, int target) {
        if (matrix[L][0]>target||matrix[R][M-1]<target){
            return false;
        }
        if (L==R){
            int[] nums = matrix[L];
            for (int i = 0; i < nums.length; i++) {
                if (nums[i]==target){
                    return true;
                }
            }
            return false;
        }
        
        int mid=L+(R-L)/2;
        if (matrix[L][0]<=target&&matrix[L+(R-L)/2][M-1]>=target){
            return process(matrix,M,L,mid,target);
        }else{
            return process(matrix,M,mid+1,R,target);
        }
    }
}
相关推荐
水龙吟啸4 分钟前
华为研发岗AI方向9.9机考题复盘&分析
人工智能·python·算法·华为
lhldsg5 分钟前
从零构建智慧场馆解决方案小程序:开发全流程实战
java·前端·小程序
小七在进步6 分钟前
类和对象(一)
java·数据结构·算法
Y_Bk7 分钟前
2026 ICPC EC网络预选赛第一场
算法
云雀衔光11 分钟前
多个 MCP Server 怎么编排:数据库 / Redis / Git / 飞书一把梭
java·数据库·人工智能·redis·git·语言模型·飞书
CarIise12 分钟前
C语言字符串基础:从char数组到双指针反转算法
算法
佳児素花痴╮14 分钟前
C++速通2
开发语言·c++·算法
慧都小妮子28 分钟前
GcExcel 服务端 Excel 组件:无需安装 Office 的 Java/.NET 报表方案
java·.net·excel·gcexcel·服务端excel组件
卓怡学长28 分钟前
w236基于springboot应用型本科院校共享在线考试系统
java·spring boot·spring·intellij-idea
程序员清风37 分钟前
从 JVM 内存模型到 GC 调优:Java 服务性能优化实战
java·jvm·性能优化