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);
        }
    }
}
相关推荐
Ro Jace几秒前
计算机专业基础教材
java·开发语言
代码游侠17 分钟前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
mango_mangojuice19 分钟前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
想进个大厂21 分钟前
代码随想录day37动态规划part05
算法
sali-tec21 分钟前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
程序员侠客行23 分钟前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
时艰.26 分钟前
Java 并发编程 — 并发容器 + CPU 缓存 + Disruptor
java·开发语言·缓存
子春一31 分钟前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
丶小鱼丶32 分钟前
并发编程之【优雅地结束线程的执行】
java
市场部需要一个软件开发岗位36 分钟前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全