2025年- H61-Lc169--74.搜索二维矩阵(二分查找)--Java版

1.题目描述


2.思路

方法一:

定义其实坐标,右上角的元素(0,n-1)。进入while循环(注意边界条件,行数小于m,列数要>=0)从右上角开始开始向左遍历(比当前元素target小的元素),向下遍历(比当前元素target大的元素),如果while循环结束都没找到,返回false。

方法二:二分查找

若将矩阵每一行拼接在上一行的末尾,则会得到一个升序数组,我们可以在该数组上二分找到目标元素。可以二分升序数组的下标,将其映射到原矩阵的行和列上。

row = mid / 列数,表示这是第几行;

col = mid % 列数,表示这是该行中的第几个元素。



3.代码实现

方法一:

java 复制代码
class Solution {
      public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length;
        int n = matrix[0].length;

        int row = 0;
        int col = n - 1; // 从右上角开始

        while (row < m && col >= 0) {
            if (matrix[row][col] == target) {
                return true;
            } else if (matrix[row][col] > target) {
                col--; // 往左走
            } else {
                row++; // 往下走
            }
        }

        return false;
    }
}

方法二:

java 复制代码
public class H74 {
    public boolean searchMatrix(int[][] matrix, int target) {
        //二维矩阵"虚拟成一维数组"进行二分查找
        //行数
        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)/2;//防止整数溢出
            //将二维矩阵映射成一维数组
            //当前mid索引对应在矩阵的位置:当前元素的行数=mid/列数. // 将一维下标映射回二维坐标
            int row=mid/n;
            //当前元素的列数=mid/列数
            int col=mid%n;
            if(matrix[row][col]==target)
            {
                return true;
            }else if(target>matrix[row][col])
            {
                left=mid+1;
            }else {
                right=mid-1;
            }

        }
        return false;

    }
    public static void main(String[] args)
    {
        H74 ms=new H74();
        int[][] matrix={{1,3,5,7},{10,11,16,20},{23,30,34,60}};
        int target=11;
        Boolean res=ms.searchMatrix(matrix,target);
        System.out.print(res);
    }
}
相关推荐
怕浪猫7 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
高洁017 小时前
具身智能中的世界模型训练
人工智能·python·深度学习·机器学习·transformer
无线通信科研笔记7 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
朝朝辞暮i7 小时前
VLA 系统学习第 1 课:VLA 到底在干什么?
人工智能·python·计算机视觉·vla
2601_962885728 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
北冥有鱼被烹8 小时前
VCSEL全景解析:与光模块NPO CPO的关系、市场量化分析与产业链影响
python
caoerzhong9 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
正在走向自律9 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
databook10 小时前
从手动检查到自动监控:一个数据质量工作流的实现
后端·python·数据分析
北冥有鱼被烹12 小时前
砷化镓与磷化铟:光模块的地基——从化学键到AI缺货潮的底层逻辑
人工智能·python