74、搜索二维矩阵

题目:

解答:

两次二分查找即可。如果出现down=-1,说明matrix[0][0]<target 那么所有数都小于target,return false即可。

第一次闭区间查找,最后upper=down+1,在down这一行查找即可。

如果出现upper越界,也就是down指向最后一行,只能说明matrix[m][0]>target,并不能说明最后一行所有数都大于target

第二次二分查找,如果没找到,循环结束后return false,否则找到时return true。

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

        while(left<=right){
            int mid = left+(right-left)/2;
            if(matrix[down][mid]==target)
                return true;
            else if(matrix[down][mid]<target)
                left=mid+1;
            else 
                right=mid-1;
        }
        return false;
    }
};

时间复杂度O(log(mn))

空间复杂度O(1)

相关推荐
历程里程碑2 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
YGGP3 小时前
【Golang】LeetCode 128. 最长连续序列
leetcode
你撅嘴真丑9 小时前
第九章-数字三角形
算法
uesowys9 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder9 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮10 小时前
AI 视觉连载1:像素
算法
智驱力人工智能10 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥11 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风11 小时前
代码随想录第十五天
数据结构·算法·leetcode
3GPP仿真实验室11 小时前
【MATLAB源码】CORDIC-QR :基于Cordic硬件级矩阵QR分解
开发语言·matlab·矩阵