74. 搜索二维矩阵

文章目录

题目

二分查找:74. 搜索二维矩阵

给你一个满足下述两条属性的 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

提示:

m == matrix.length

n == matrixi.length

1 <= m, n <= 100

-104 <= matrixij, target <= 104

代码

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        //判断矩阵是否为空
        if(matrix.empty()||matrix[0].empty()){
            return false;
        }
        //数组的行和列
        int m=matrix.size();
        int n=matrix[0].size();
        //二份查找的两个位置
        int left=0;
        int right=m*n-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            //在数组中的映射关系
            int row=mid/n;
            int col=mid%n;
            //如果与目标值相等直接返回true
            if(matrix[row][col]==target){
                return true;
            }else if(matrix[row][col]<target){//如果目标值在中间值的右边,则左边界为mid+1
                left=mid+1;
            }else{//如果目标值在中间值的左边,则右边界为mid-1
                right=mid-1;
            }
        }
        return false;
    }
};

原理图

原理解释

提示:算法流程及解释在代码中已标注

在不使用额外矩阵的情况下,在原有的矩阵上进行二分查找

涉及到元素在二维数组中和元素在一维数组中的映射关系

以一维数组为例:

i为一维数组下标,n为二维数组的列

row=i/n;

col=i%n;

时间复杂度:O (log (m*n)) 二分查找

空间复杂度:O (1) 仅用常数变量

相关推荐
一晌小贪欢5 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck5 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型
一条大祥脚6 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
·present·6 小时前
CSAPP(lecture 13_02 Linking)
c语言·c++
旖旎夜光7 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
文丑颜不良啊8 小时前
LeetCode2241~2260题目解析
java·leetcode
文丑颜不良啊8 小时前
LeetCode2321~2340题目解析
java·leetcode
青少儿编程课堂8 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
白杨尚青9 小时前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
旖旎夜光10 小时前
【C++ 基础入门】C++ 继承(上):概念、切片、隐藏、默认成员函数与友元
c++·笔记·学习