【LeetCode热题100】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 == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104

四.解题思路

解法1:先对每列第一个元素二分,再二分查找符合条件的某一行。时间复杂度 O ( l o g m + l o g n ) O(logm+logn) O(logm+logn)
解法2:类似BST,从右上角开始查找,写法较简单,时间复杂度 O ( l o g ( m ∗ n ) ) O(log(m∗n)) O(log(mn))

五.代码实现

解2:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {

        int row = matrix.size();
        int col = matrix[0].size();

        for (int i = 0, j = col - 1; i < row && j >= 0;
             matrix[i][j] > target ? j-- : i++) {
            if (matrix[i][j] == target)
                return true;
        }
        return false;
    }
};

解1:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {

        int rowl = 0;
        int rowr = matrix.size() - 1;
        int rowmid = (rowl + rowr) / 2;
        while (rowl <= rowr) {
            rowmid = (rowl + rowr) / 2;
            if (matrix[rowmid][0] == target)
                return true;
            if (matrix[rowmid][0] > target) {
                rowr -= 1;
            }
            else if (matrix[rowmid][0] < target) {
                rowl += 1;
            }
        }
        int l = 0;
        int r = matrix[0].size() - 1;
        int m = (l + r) / 2;
        int row;
        if (rowl > rowr)
            row = rowr;
        else
            row = rowl;
        if (row < 0 || row >= matrix.size())
            return false;

        while (l <= r) {
            m = (l + r) / 2;

            if (matrix[row][m] == target)
                return true;

            if (matrix[row][m] > target) {
                r -= 1;
            } else if (matrix[row][m] < target) {
                l += 1;
            }
        }
        return false;
    }
};

六.题目总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/522785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

清明寄哀思,VR云祭扫沉浸式缅怀先烈

只要拿出手机扫一扫&#xff0c;就能通过VR全景&#xff0c;沉浸式走进烈士陵园、纪念场馆&#xff0c;随场景进行同步参观&#xff0c;进行“云祭扫”。这种“云祭扫”活动一经推出就受到了广大群众的追捧&#xff0c;VR全景云祭扫以一种全新、绿色、安全的理念&#xff0c;通…

别让.[[hashtreep@waifu.club]].svh勒索病毒盯上你:一份实用的科普与防范经验

引言&#xff1a; 在数字化浪潮席卷全球的今天&#xff0c;我们享受着信息技术带来的便捷与高效。然而&#xff0c;随着我们对网络的依赖越来越深&#xff0c;网络安全问题也日益凸显。其中&#xff0c;.[[hashtreepwaifu.club]].svh勒索病毒就是一种让人闻之色变的网络威胁。它…

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后&#xff0c;提示Another application changed your Desktop configuration&#xff0c;Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决&#xff1a; sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

2024/4/1—力扣—两数相除

代码实现&#xff1a; 思路&#xff1a;用减法模拟除法 // 用减法模拟除法 int func(int a, int b) { // a、b均为负数int ans 0;while (a < b) { // a的绝对值大于等于b&#xff0c;表示此时a够减int t b;int count 1; // 用来计数被减的次数// t > INT_MIN / 2:防止…

Tire树

Trie 树是一种多叉树的结构&#xff0c;每个节点保存一个字符&#xff0c;一条路径表示一个字符串。 Trie字符串统计 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x&#xff1b;Q x 询问一个字符串在集合中出现了多少次。 共有 N 个…

突破外贸挑战:推荐几款优秀的CRM软件,解析解决方案

外贸企业面临的困境愈演愈烈&#xff0c;他们不仅面临着外部竞争对手以及市场的挑战&#xff0c;内部还面临着资金和管理难题的挤压。墨守成规&#xff0c;还按照之前单一的管理运营模式&#xff0c;迟早会被市场淘汰。 现在的市场趋势是企业要逐步走向精细化管理&#xff0c;将…

蓝牙学习十(扫描)

一、简介 从之前的文章中我们知道&#xff0c;蓝牙GAP层定义了四种角色&#xff0c;广播者&#xff08;Broadcaster&#xff09;、观察者&#xff08;Observer&#xff09;、外围设备&#xff08;Peripheral&#xff09;、中央设备&#xff08;Central&#xff09;。 之前的学习…

华为ICT七力助推文化产业新质生产力发展

创新起主导作用的新质生产力由新劳动者、新劳动对象、新劳动工具、新基础设施等四大要素共同构成&#xff0c;符合新发展理念的先进生产力质态&#xff1b;具有高科技、高能效、高质量等三大突出特征。而通过壮大新产业、打造新模式、激发新动能&#xff0c;新质生产力能够摆脱…

JMeter源码解读 - HashTree(超详细)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在 JMeter 中&#xff0c;HashTree 是一种用于组织和管理测试计…

网络安全意识也是基础防御中的关键一环

在当今数字化时代&#xff0c;网络安全已经成为企业和个人生活中不可或缺的一部分。网络攻击的不断演进和加剧使得保护个人隐私、商业机密和国家安全变得尤为重要。然而&#xff0c;网络安全并非仅仅是技术层面的问题&#xff0c;更是一个综合性的挑战&#xff0c;需要广泛的参…

场景文本检测识别学习 day01(传统OCR的流程、常见的损失函数)

传统OCR的流程 传统OCR&#xff1a;传统光学字符识别常见的的模型主要包括以下几个步骤来识别文本 预处理&#xff1a;预处理是指对输入的图像进行处理&#xff0c;以提高文字识别的准确率。这可能包括调整图像大小、转换为灰度图像、二值化&#xff08;将图像转换为黑白两色&…

Android视角看鸿蒙第十一课-鸿蒙的布局之层叠布局Stack

Android视角看鸿蒙第十一课-鸿蒙的布局之层叠布局 导读 在Android中我个人认为&#xff0c;最离不开的就是LinearLayout和FrameLayout了&#xff0c;RelativeLayout我都基本不用的。 所以我把层叠布局排在了第二位。 官方描述 如何定义层叠布局 Stack组件为容器组件&#x…

瑞登梅尔邀您参观2024第13届生物发酵展精彩不容错过

参展企业介绍 我们&#xff0c;瑞登梅尔(上海)纤维贸易有限公司 致力于研究、开发和生产以植物为原料的高品质有机纤维。我们让这些有价值的天然物质的许多特性&#xff0c;能够广泛应用于现代工业的各个领域。 JRS的纤维产品是由天然的、可再生的原料制成。例如&#xff1a;…

泛微OA 自定义多选浏览框

1、建模引擎-》应用建模-》表单 2、建模引擎-》应用建模-》模块 3、建模引擎-》应用建模-》查询 4、把查询页面挂到前端页面。 效果展示&#xff1a; 5、建模引擎-》应用建模-》浏览框 6、流程表单中字段应用

遥感影像处理利器:PyTorch框架下CNN-Transformer,地物分类、目标检测、语义分割和点云分类

目录 专题一 深度卷积网络知识详解 专题二 PyTorch应用与实践&#xff08;遥感图像场景分类&#xff09; 专题三 卷积神经网络实践与目标检测 专题四 卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】 专题五 Transformer与遥感影像目标检测 专题六 Transformer的遥…

中药配方颗粒备案信息数据库<2.5W+备案>

中药配方颗粒备案信息是指中药配方颗粒生产企业向国家药品监督管理局申报备案的相关信息。备案信息包括中药配方颗粒的名称、备案号、备案时间、备案状态、生产企业、生产地址、规格、包装、执行标准、保质期、不良反应检测、备案省局等信息。 通过对中药配方颗粒备案信息的查…

完成产品兼容互认,用KubeBlocks可实现OceanBase集群管理

本文转载自云猿生聊技术&#xff08;CloudNativeDataTech&#xff09; 前言 KubeBlocks&#xff08;简称 KB&#xff09;在最新发布的0.7版本中&#xff0c;通过组件扩展&#xff08;Addon&#xff09;的形式新增了对OceanBase的支持功能。这一更新为企业级和非企业级用户提供…

数据结构6.2:二叉树的前中后序遍历

二叉树前中后序遍历代码实现 二叉树的遍历 二叉树的前序遍历 先输出父节点,再遍历左子树和右子树 二叉树的中序遍历 先遍历左子树,再输出父节点,再遍历右子树 二叉树的后序遍历 先遍历左子树,再遍历右子树,最后输出父节点 代码实现 每个节点中包含一个数据域和两个地址…

【VTKExamples::Meshes】第五期 ClipFrustum

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ClipFrustum,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. ClipFrustum …

C语言函数实现冒泡排序

前言 今天我们来看看怎么使用函数的方式实现冒泡排序吧&#xff0c;我们以一个数组为例arr[] {9,8,7,6,5,4,3,2,1,0},我们将这个数组通过冒泡排序的方式让他变为升序吧。 代码实现 #include<stdio.h> void bubble_sort(int arr[], int sz) {int i 0;for (i 0;i < s…