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);
    }
}
相关推荐
awonw10 分钟前
[python][基础]Flask 技术栈
开发语言·python·flask
bright_colo32 分钟前
Python-初学openCV——图像预处理(四)——滤波器
python·opencv·计算机视觉
Nandeska1 小时前
一、Python环境、Jupyter与Pycharm
python·jupyter·pycharm
No0d1es2 小时前
CPA青少年编程能力等级测评试卷及答案 Python编程(三级)
python·青少年编程·cpa
惜.己2 小时前
pytest中使用ordering控制函数的执行顺序
开发语言·python·pytest
数据智能老司机2 小时前
使用 Python 进行并行与高性能编程——并行编程导论
python·性能优化·编程语言
Alla T2 小时前
【通识】线性代数(Linear Algebra)
线性代数
精灵vector2 小时前
【Agentic】通过LangGrah实现RAG评分和重写
python