[力扣 Hot100]Day21 搜索二维矩阵 II

题目描述

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
在这里插入图片描述
出处

思路

矩阵的特点是任意一个位置的数是以其为右下角的子矩阵的最大值,同时是以其为左上角的子矩阵的最小值。所以可以进行二分查找。当target大于某个位置的值时,以这个位置为右下角的矩阵就不用搜了,剩余的部分组成两个新的矩阵。反之同理。
请添加图片描述

代码

 class Solution {
   
private:
    bool _2D_search(vector<vector<int>>& matrix, int target, int x1, int y1, int x2, int y2){
   
        if(x1+1>=x2 || y1+1>=y2){
   
            for(int i=x1; i<=x2; i++)
                for(int j=y1; j<=y2; j++)
                    if(matrix[i][j]==target)
                        return true;
            return false;
        }
        int mid_x=(x1+x2)/2,mid_y=(y1+y2)/2;
        if(target==matrix[mid_x][mid_y])
            return true;
        else if(target>matrix[mid_x][mid_y])
            return _2D_search(matrix,target,x1,mid_y,x2,y2) || _2D_search(matrix,target,mid_x,y1,x2,mid_y);
        else
            return _2D_search(matrix,target,x1,y1,x2,mid_y) || _2D_search(matrix,target,x1,mid_y,mid_x,y2);
    }
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
   
        int m=matrix.size();
        int n=matrix[0].size();
        int mi=min(m,n);
        if(matrix[0][0]==target || matrix[m-1][n-1]==target)
            return true;
        if(matrix[0][0]>target || matrix[m-1][n-1]<target)
            return false;
        return _2D_search(matrix,target,0,0,m-1,n-1);
        
    }
};

相关推荐

  1. 【算法详解】240.搜索矩阵II

    2024-02-03 12:14:02       41 阅读
  2. 100】240.搜索矩阵2

    2024-02-03 12:14:02       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-03 12:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-03 12:14:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-03 12:14:02       82 阅读
  4. Python语言-面向对象

    2024-02-03 12:14:02       91 阅读

热门阅读

  1. vato 在 Word 文档中使用 C# 嵌入 Excel 图表

    2024-02-03 12:14:02       38 阅读
  2. [CUDA 学习笔记] Element-wise 算子优化

    2024-02-03 12:14:02       46 阅读
  3. Matlab之调试bug常用函数try和catch

    2024-02-03 12:14:02       44 阅读
  4. 什么是适配器模式?它的实现方式有哪些?

    2024-02-03 12:14:02       53 阅读
  5. 华为-配置OSPF负载分担实验

    2024-02-03 12:14:02       46 阅读
  6. c++数据类型解释

    2024-02-03 12:14:02       45 阅读