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) 仅用常数变量

相关推荐
Jmyd012310 小时前
手持激光三维扫描仪技术解析:三角测量数据链路、材质适配矩阵与点云处理流程
数码相机·矩阵·材质·三维数字化
Frank_refuel10 小时前
【C++】Json库介绍和使用
c++
重生之小比特10 小时前
【C++进阶】map和set
java·开发语言·c++
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼11 小时前
linux 进程信号(上)
linux·c++·算法
海上小飞龙13 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Persistent的粽子!13 小时前
双指针算法:最大盛水容器
c++·算法·leetcode
小小龙学IT13 小时前
三菱 PLC MC 协议(SLMP / QnA 兼容 3E 帧)深度解析:从帧结构到 C++/Go 双语言采集实战
c语言·c++·golang
程序猿编码13 小时前
C++/CUDA 手写 LLM 推理引擎:拆解 vLLM 核心 PagedAttention 与连续批处理
开发语言·c++·深度学习·神经网络·推理·vllm
hold?fish:palm13 小时前
44 二叉搜索树中第K小的元素
开发语言·c++·算法