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

    }
}
相关推荐
一念&2 小时前
每日一个C语言知识:C 头文件
c语言·开发语言·算法
程序员小凯4 小时前
Spring Boot文件处理与存储详解
java·spring boot·后端
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 88: 环绕字符串中唯一的子字符串
java·数据结构·算法·leetcode·深度优先·动态规划
黑云压城After6 小时前
vue2实现图片自定义裁剪功能(uniapp)
java·前端·javascript
B站_计算机毕业设计之家6 小时前
python电商商品评论数据分析可视化系统 爬虫 数据采集 Flask框架 NLP情感分析 LDA主题分析 Bayes评论分类(源码) ✅
大数据·hadoop·爬虫·python·算法·数据分析·1024程序员节
小白菜又菜7 小时前
Leetcode 1518. Water Bottles
算法·leetcode·职场和发展
长存祈月心7 小时前
Rust Option 与 Result深度解析
算法
zcl_19917 小时前
记一次ThreadLocal导致的生产事故
java
RoboWizard7 小时前
怎么判断我的电脑是否支持PCIe 5.0 SSD?Kingston FURY Renegade G5
java·spring·智能手机·电脑·金士顿
杭州杭州杭州8 小时前
机器学习(3)---线性算法,决策树,神经网络,支持向量机
算法·决策树·机器学习