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;
    }
};
相关推荐
夏幻灵4 分钟前
每日一题:LeetCode 1:两数之和——从暴力枚举到 Map 哈希表优化
算法·leetcode·散列表
段一凡-华北理工大学13 分钟前
高炉炼铁机器视觉与智能识别十八讲~系列文章09:AI 算法基础:从传统图像处理到深度学习的视觉“大脑“
图像处理·人工智能·算法·机器视觉·工业智能化·高炉炼铁智能化·高炉智能识别
alphaTao20 分钟前
LeetCode 每日一题 2026/9/28-2026/10/4
算法·leetcode
源码学社22 分钟前
图像去水印实测:OpenCV inpainting vs LaMa,传统算法和 AI 模型差距有多大
人工智能·opencv·算法·去水印·图片水印·ai去水印
一条大祥脚38 分钟前
26ICPC网络赛第二场 计数|DFS|MEX|贪心
算法·深度优先·mex·icpc网络赛
aqiu11111142 分钟前
【蓝桥杯 / C++】星际争霸 — 字符串逆序对与大整数自定义排序
算法
行者全栈架构师1 小时前
【鸿蒙心迹】ArkUI 列表性能实战——为什么 200 条数据页面掉到 20fps,LazyForEach 怎么救(HarmonyOS 7.x)
前端·算法·架构
一碗甜汤ᐝ1 小时前
高级算法分析与设计 | 常见 NP-Complete 问题总结
算法·np-complete·算法分析与设计·np完备问题
垆边人似月.1 小时前
分割数组的最大值最小化(200分 / 二分答案 + 贪心)
数据结构·算法·排序算法
CQU_JIAKE1 小时前
10.7【A】
算法