LeetCode Hot100 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false

示例 1:

复制代码
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

复制代码
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

思路

第一次

两次二分查找,先找行,再找列,注意数组不要越界。复杂度上logmn

第二次

当一维数组做,复杂度同logmn

代码

第一遍

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int i = 0,j = matrix.size()-1;
        int m,row;
        while(i<=j)
        {
            m = i+ (j-i)/2;
            if(matrix[m][0] == target)
                return true;
            else if(matrix[m][0] > target)
            {
                j = m-1;
            }
            else
                i = m+1;
        }
        if((row = i-1) < 0)
            return false;
        i = 0;
        j = matrix[0].size()-1;
        while(i<=j)
        {
            m = i + (j-i)/2;
            if(matrix[row][m] == target)
                return true;
            else if(matrix[row][m] > target)
                j = m-1;
            else
                i = m+1;
        }
        return false;
    }
};

第二遍

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int i = 0,j = matrix.size()*matrix[0].size()-1;
        int m,size = matrix[0].size();
        int row,col;
        while(i<=j)
        {
            m = i+ (j-i)/2;
            row = m/size;
            col = m%size;
            if(matrix[row][col] == target)
                return true;
            else if(matrix[row][col] > target)
            {
                j = m-1;
            }
            else
                i = m+1;
        }
        return false;
    }
};
相关推荐
木木子221 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
Sw1zzle4 小时前
算法入门(四):二叉树 - 递归遍历三件套
算法·leetcode
万法若空5 小时前
【算法-查找】查找算法
java·数据结构·算法
海石5 小时前
子树怎么找?树的3种遍历方式来帮忙!
算法·leetcode
海石5 小时前
难度分 1588:思路 + 技巧 = AC
算法·leetcode
珠海西格电力8 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
还有多久拿退休金10 小时前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
KaMeidebaby11 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
是Dream呀11 小时前
基于深度学习的人类行为识别算法研究
人工智能·深度学习·算法
happyprince12 小时前
03_NVIDIA_ModelOpt-量化算法深入
人工智能·深度学习·算法