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

    }
}
相关推荐
兆子龙3 小时前
ahooks useRequest 深度解析:一个 Hook 搞定所有请求
java·javascript
兆子龙4 小时前
React Suspense 从入门到实战:让异步加载更优雅
java·javascript
咕白m6256 小时前
Java 实现 Excel 转 HTML:完整示例
java
RealPluto6 小时前
Spring AOP 失效排查
java·spring
码路飞7 小时前
热榜全是 OpenClaw,但我用 50 行 Python 就造了个桌面 AI Agent 🤖
java·javascript
Nyarlathotep01137 小时前
LinkedList源码分析
java·后端
CoovallyAIHub7 小时前
181小时视频丢给GPT-5,准确率只有15%——南大联合NVIDIA等五校发布多模态终身理解数据集
深度学习·算法·计算机视觉
用户8307196840827 小时前
Java 告别繁琐数据统计代码!MySQL 8 窗口函数真香
java·sql·mysql