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)

相关推荐
Emberone5 分钟前
排序:万物皆有序
算法·排序算法
其实秋天的枫7 分钟前
2025年12月英语六级真题及答案解析完整版(第一、二、三套全PDF)
经验分享·算法
2401_8747325313 分钟前
C++并发编程中的死锁避免
开发语言·c++·算法
2301_7923082515 分钟前
C++编译期数学计算
开发语言·c++·算法
hetao173383716 分钟前
2025-03-13~22 hetao1733837 的刷题记录
c++·算法
sqyno1sky27 分钟前
C++中的契约编程
开发语言·c++·算法
优化控制仿真模型39 分钟前
2026年最新驾考科目一考试题库2309道全。电子版pdf
经验分享·算法·pdf
qq_3349031542 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
阿贵---1 小时前
C++代码规范化工具
开发语言·c++·算法
暮冬-  Gentle°1 小时前
自定义内存检测工具
开发语言·c++·算法