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

相关推荐
CCCCCCCCharlie5 小时前
从0到1:一个字节的磁盘之旅
linux·开发语言·c++
艾莉丝努力练剑6 小时前
【AI大模型接入SDK】ChatServer接口实现
c++·人工智能·学习·ai·架构·大模型·sdk
要练八块腹肌6 小时前
AVL树的讲解与实现
c++
白杨尚青8 小时前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定
syagain_zsx8 小时前
spdlog实战:日志分级、滚动与性能调优
linux·c++·日志库·二次开发日志库
weixin_307779131 天前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins1 天前
c++新增頭文件
c++
Shadow(⊙o⊙)1 天前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
by209991 天前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Nil2081 天前
leetcode 49字母异位分组
算法·leetcode·哈希算法