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);
        }
    }
}
相关推荐
ノBye~7 分钟前
Maven聚合项目搭建
java·maven
sevenlin8 分钟前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
乐观勇敢坚强的老彭9 分钟前
本周C++编程课笔记:for循环练习
java·c++·笔记
摇滚侠9 分钟前
从 Tomcat 服务最大连接数角度讲一讲高峰期高考查分网站打不开,服务器的资源是有限的,同一时间大量用户连接服务器,会耗尽服务器的资源,服务器会拒绝新的连接
java·服务器·tomcat
NE_STOP9 分钟前
MyBatis-plus拓展之字段类型处理器、自动填充和乐观锁等(完结)
java
中国lanwp9 分钟前
Maven Gradle SBT Mill Ivy Grape Leiningen Buildr构建工具
java·maven
肥猪猪爸10 分钟前
数据库 2PC 极简流程图
java·数据库·分布式·mysql·分布式事务·2pc
二月夜12 分钟前
Maven 避坑指南:高频配置错误总结 & 解决方案
java·maven
飞Link12 分钟前
降维打击聚类难题:高斯混合模型 (GMM) 深度解析与实战
人工智能·算法·机器学习·数据挖掘·聚类
一只空白格13 分钟前
ThreadLocal的作用和底层原理
java·开发语言·jvm