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);
        }
    }
}
相关推荐
Arva .17 小时前
说说线程的生命周期和状态
java·开发语言
45288655上山打老虎17 小时前
List容器
数据结构·windows·list
tryxr17 小时前
HashTable、HashMap、ConcurrentHashMap 之间的区别
java·开发语言·hash
松涛和鸣17 小时前
DAY32 Linux Thread Programming
linux·运维·数据库·算法·list
无事好时节17 小时前
Linux 线程
java·开发语言·rpc
LYFlied17 小时前
【每日算法】LeetCode 234. 回文链表详解
算法·leetcode·链表
我家领养了个白胖胖17 小时前
Prompt、格式化输出、持久化ChatMemory
java·后端·ai编程
sszdlbw18 小时前
后端springboot框架入门学习--第二篇
java·spring boot·学习
阿拉斯攀登18 小时前
MyBatis 全面解析 & Spring Boot 集成实战
java·spring boot·mybatis·持久层框架
A尘埃18 小时前
Java业务场景(高并发+高可用+分布式)
java·开发语言·分布式