【二分查找】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;

    }
}
相关推荐
我才是银古37 分钟前
构建 Java GIS 工具库:从碎片化 API 到统一抽象的设计实践
java·gis·geotools·gdal·esri
TPBoreas1 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言
额鹅恶饿呃1 小时前
C语言中的数据结构和变量
c语言·数据结构·算法
敲代码的嘎仔1 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
编程(变成)小辣鸡2 小时前
Spring事务失效场景
java·后端·spring
运行时记录2 小时前
prompt-optimizer skill
算法
万法若空2 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
极客先躯2 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
退休倒计时2 小时前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript
学逆向的3 小时前
汇编——内存
开发语言·汇编·算法·网络安全