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

    }
}
相关推荐
落落落sss3 分钟前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸6 分钟前
flink doris批量sink
java·前端·flink
C7211BA15 分钟前
使用knn算法对iris数据集进行分类
算法·分类·数据挖掘
Tisfy18 分钟前
LeetCode 2398.预算内的最多机器人数目:滑动窗口+单调队列——思路清晰的一篇题解
算法·leetcode·机器人·题解·滑动窗口
程序猿练习生22 分钟前
C++速通LeetCode简单第18题-杨辉三角(全网唯一递归法)
c++·算法·leetcode
Huazzi.25 分钟前
算法题解:斐波那契数列(C语言)
c语言·开发语言·算法
汉字萌萌哒26 分钟前
【2022 CCF 非专业级别软件能力认证第一轮(CSP-J1)入门级 C++语言试题及解析】
数据结构·c++·算法
2301_8071805427 分钟前
icpc江西:L. campus(dij最短路)
算法
th新港28 分钟前
CCF201909_1
数据结构·c++·算法·ccf
Dola_Pan29 分钟前
字符串的KMP算法详解及C/C++代码实现
算法