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);
        }
    }
}
相关推荐
m0_7202450112 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC13 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
EntyIU13 小时前
NFS离线部署
java
hans汉斯13 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院14 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李15 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.15 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞15 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
OH_TPC16 小时前
HarmonyOS APP开发---“滤镜大师“图像处理App,需要用到这个库
java·图像处理·华为·harmonyos·鸿蒙
wabs66616 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路