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);
        }
    }
}
相关推荐
码上有前8 分钟前
Java高级教程:数据结构、集合框架、ArrayList与LinkedList深度解析
java·数据结构·python
&春风有信11 分钟前
FreeRTOS之链表源码分析
c语言·数据结构·嵌入式硬件·链表
榕树子19 分钟前
[java] 什么是 Apache Felix
java·开发语言·apache
一只鸡某20 分钟前
实习冲刺第三十一天
数据结构·c++·算法·leetcode·排序算法
极客先躯21 分钟前
高级java每日一道面试题-2024年11月23日-JVM篇-什么时候会出发FullGC?
java·jvm·fullgc·jvm篇·老年代内存不足·system.gc·减少full gc的策略
Am心若依旧40928 分钟前
[高阶数据结构二] LRU Cache详解
数据结构
飞滕人生TYF35 分钟前
斐波那契数列 相关问题 详解
java·数学·动态规划·递归·斐波那契数列
无限大.1 小时前
C++ String
java·开发语言·c++
材料苦逼不会梦到计算机白富美1 小时前
贪心算法-Huffman树 不等式 推公式
算法·贪心算法
Y.O.U..1 小时前
力扣刷题-excel表名称序列相转换
算法·leetcode·excel