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);
        }
    }
}
相关推荐
蜗牛互联网27 分钟前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
Nil20837 分钟前
leetcode 198打家劫舍
算法·leetcode·职场和发展
SL_staff44 分钟前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
Shaoshing1 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
mmmmath_31 小时前
LeetCode.429.N叉树的层序遍历
数据结构·leetcode
dd聊技术1 小时前
Prompt 从代码常量搬进数据库:改一句话,不用再发一次版
java·后端
ly76891 小时前
Spring Data MongoDB 批量写入实践:BulkOperations 批大小与写关注权衡
java·mongodb·spring·批量写入·bulkoperations·写关注·mongotemplate
TAKETODAY1 小时前
Netty 是怎么把 HTTP 请求交给 MVC 的?一个请求的完整链路
java·netty
蚰蜒螟1 小时前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
loulanyue_2 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法