【二分查找】74. 搜索二维矩阵

74. 搜索二维矩阵

解题思路

方法1

  • 将二维数组转换为一维数组
  • 使用二分查找
java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // 使用二分查找

        // 将矩阵写入一个数组中 然后使用二分查找算法
        int[] a = new int[matrix.length * matrix[0].length];
        int k = 0;
        // 将所有元素写入a
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
                a[k++] = matrix[i][j];
            }
        }

        int low = 0;
        int high = a.length - 1;

        while(low <= high){
            int mid = (high  - low) / 2 + low;
            if(a[mid] == target){
                return true;
            }else if(a[mid] > target){
                high = mid - 1;
            }else if(a[mid] < target){
                low  = mid + 1;
            }
        }


        return false;
    }
}

方法2

  • 直接在二维数组上使用二分查找
java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        // 将二维矩阵的索引转换为一维数组的索引
        // 假设矩阵是m行n列
        // 那么(i,j)的绝对索引 idx = i * n + j  
        // 那么知道idx 就可以知道 i = idx / n  j = idx % n
        int m =  matrix.length;
        int n = matrix[0].length;

        int left = 0; 
        int right = m * n - 1;
        while(left <= right){
            int mid = left + (right - left + 1) / 2;

            int i = mid / n;
            int j = mid % n;

            if(matrix[i][j] == target){
                return true;
            }else if(matrix[i][j] < target){
                left = mid + 1;
            }else{
                right = mid - 1;
            }
        }

        return false;

    }
}
相关推荐
I'm Jie4 分钟前
(五)Gradle 依赖传递与冲突处理
java·spring boot·spring·kotlin·gradle·maven
我命由我123455 分钟前
Spring Cloud - Spring Cloud 声明式接口调用(Fiegn 声明式接口调用概述、Fiegn 使用)
java·后端·spring·spring cloud·微服务·架构·java-ee
_extraordinary_6 分钟前
Java Spring事务,事务的传播机制
java·开发语言·spring
摸鱼的老谭6 分钟前
Java学习之旅第三季-17:Lambda表达式
java·lambda表达式·1024程序员节
文火冰糖的硅基工坊8 分钟前
[人工智能-大模型-66]:模型层技术 - 两种编程范式:数学函数式编程与逻辑推理式编程,构建起截然不同的智能系统。
人工智能·神经网络·算法·1024程序员节
摸鱼的老谭18 分钟前
Java学习之旅第三季-18:方法引用
java·方法引用
im_AMBER32 分钟前
Leetcode 34
算法·leetcode
im_AMBER38 分钟前
Leetcode 31
学习·算法·leetcode
lang201509281 小时前
Spring依赖注入与配置全解析
java·spring
百锦再1 小时前
破茧成蝶:全方位解析Java学习难点与征服之路
java·python·学习·struts·kafka·maven·intellij-idea