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);
        }
    }
}
相关推荐
Misnearch3 分钟前
1、数组/字符串
java·数据结构·算法
☆cwlulu5 分钟前
Linux系统调用与C库I/O的底层奥秘
java·spring boot·spring
008爬虫实战录17 分钟前
【数据结构】 树、二叉树、完全二叉树,先序遍历、中序遍历、后序遍历
数据结构·算法
小O的算法实验室19 分钟前
2024年AST,基于费马点分组粒子群算法的复合型无人机统一路径规划
算法·无人机
于先生吖31 分钟前
前后端分离人事招聘项目,校招宣讲预约+社招双向撮合功能架构设计教程
java·开发语言·uni-app
user_admin_god31 分钟前
Claude Code 安装与配置指南:兼容国产模型,禁止自动更新
java·人工智能
AllData公司负责人33 分钟前
大模型赋能AllData数据中台,系列升级|通过联合智谱大模型与BiSheng开源项目,建设企业大模型应用开发平台,支持知识库向量检索!
大数据·数据结构·数据库·算法·大模型·向量数据库·智谱ai
一个王同学40 分钟前
从零到一 | CV转多模态大模型 | week12 | 整理 MiniLLaVA 工程与文档
人工智能·深度学习·算法·机器学习·计算机视觉
一只鹿鹿鹿1 小时前
网络安全评估方案
java·大数据·运维·物联网·web安全
码界索隆1 小时前
Python转Java系列:作者有话说
java·开发语言·python