21 搜索二维矩阵 II

news2024/11/26 16:37:16

搜索二维矩阵 II

    • 题解1 对角线上下循环搜索(超时)
  • 生气!!无脑循环都不超时
    • 题解2 无脑循环
    • 题解3 学习STL(二分查找)

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列
  • 每列的元素从上到下升序排列
    在这里插入图片描述
    在这里插入图片描述

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • − 1 0 9 -10^9 109 <= matrix[i][j] <= 1 0 9 10^9 109
  • 每行的所有元素从左到右升序排列 每列的所有元素从上到下升序排列
  • − 1 0 9 -10^9 109 <= target <= 1 0 9 10^9 109

题解1 对角线上下循环搜索(超时)

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        const int row = matrix.size();
        const int column = matrix[0].size();
        int km = min(row, column);
        if(1 == row){
            for(int i = 0; i < column; i++){
                if(target == matrix[0][i])
                    return 1;
                else if(! i && target < matrix[0][i])
                    return 0;
            }
        }else if(1 == column){
            for(int i = 0; i < row; i++){
                if(target == matrix[i][0])
                    return 1;
                else if(! i && target < matrix[i][0])
                    return 0;
            }
        }else{
            for(int i = 0; i < km; i++){
                if(target == matrix[i][i])
                    return 1;
                else if(target < matrix[i][i]){
                    if(! i) return 0;
                    else{
                    // 剪枝失败
                        // 搜索空间只有 matrix[<i][<j]
                        // 行
                        for(int k = 0; k < i; k++)
                            for(int l = 0; l < column; l++)
                                if(target == matrix[k][l])
                                    return 1;
                        // 列
                        for(int k = 0; k < i; k++)
                            for(int l = 0; l < row; l++)
                                if(target == matrix[l][k])
                                    return 1;
                    }
                }
            }
        }
        
        return 0;
    }
};

生气!!无脑循环都不超时

在这里插入图片描述

// 整理思路
// 应该从第一行最大值开始比较,不要纠结在对角线上
// 根据数据特点剪枝(缩小搜索空间)
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        const int row = matrix.size();
        const int column = matrix[0].size();
        int i(0), j(column-1);
        while(i < row && j >= 0){
            if(target == matrix[i][j]) 
                return 1; 
            else if(target > matrix[i][j]) 
                i ++;
            else j --;
        }
        
        return 0;
    }
};

在这里插入图片描述

题解2 无脑循环

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        for (const auto& row: matrix) {
            for (int element: row) {
                if (element == target) {
                    return true;
                }
            }
        }
        return false;
    }
};

在这里插入图片描述

题解3 学习STL(二分查找)

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        for (const auto& row: matrix) {
            // 二分查找
            auto it = lower_bound(row.begin(), row.end(), target);
            if (it != row.end() && *it == target) {
                return true;
            }
        }
        return false;
    }
};

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过Power Platform自定义D365 CE 业务需求 - 3. 使用Microsoft Power应用程序

Microsoft Power Apps是一个用于开发应用程序的无代码、无代码平台。Power应用程序可以在Dataverse之上配置为数据库。尽管您可以连接Salesforce、OneDrive、Dropbox等多种云源,但Dataverse也可以用作内部数据库来构建应用程序,并通过连接器连接其他数据源进行集成。 Power应…

Redis 初识与入门

1. 什么是Redis Redis 是一种基于内存的数据库&#xff0c;对数据的读写操作都是在内存中完成&#xff0c;因此读写速度非常快&#xff0c;常用于缓存&#xff0c;消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景&#xff0c;比如 String(字符串)、…

使用CoreOS来部署一个Kubernetes集群,包括必要的步骤和关键概念

文章目录 什么是CoreOS&#xff1f;准备CoreOS节点安装Kubernetes初始化Kubernetes控制平面加入其他节点设置kubectl配置安装网络插件验证集群部署应用程序结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍…

python 虚拟环境调用allure报错:FileNotFoundError: [WinError 2] 系统找不到指定的文件

一、遇到的问题 python代码调用命令行 allure命令报错&#xff0c;提示找不到allure这个命令。python虚拟环境中已经安装了pytest-allure 代码如下&#xff1a; import subprocessif __name__ "__main__":# retcode pytest.main()subprocess.call([pytest, --al…

SpringBoot整合Canal实现MySQL与ES数据同步

文章目录 SpringBoot项目引入Canal依赖配置文件项目结构设置监听类其余类、接口内容启动类实体类Controller类Mapper接口Serice接口 运行测试 开始之前请确认docker中已运行mysql与canal容器&#xff0c;并完成了监听binlog配置 未完成可移步&#xff1a; Docker部署Canal监听…

领域驱动设计:事件风暴构建领域模型

文章目录 事件风暴需要准备些什么&#xff1f;如何用事件风暴构建领域模型&#xff1f; 事件风暴是一项团队活动&#xff0c;领域专家与项目团队通过头脑风暴的形式&#xff0c;罗列出领域中所有的领域事件&#xff0c;整合之后形成最终的领域事件集合&#xff0c;然后对每一个…

共享股东模式:一种新型的商业模式,让你轻松创业

你是否想过拥有自己的事业&#xff0c;但又觉得创业风险太大&#xff0c;资金太少&#xff0c;人脉太弱&#xff1f;你是否想过利用自己的消费能力&#xff0c;获得更多的收益&#xff0c;而不仅仅是消费者&#xff1f;你是否想过成为一个有影响力的人&#xff0c;为社会创造价…

【STM32】影子寄存器

不可操作但是真正起作用的寄存器是影子寄存器 定时器框图中&#xff0c;有些寄存器下有个阴影 这些阴影的表示这些寄存器存在影子寄存器。 图中也有对这些影子的说明&#xff0c;在U事件时传送预装载寄存器至实际寄存器。 有阴影的寄存器(AutoReloadRegister)&#xff0c;表…

【OpenCL基础 · 二 】OpenCL架构

文章目录 前言一、OpenCL平台模型二、OpenCL执行模型1.上下文2.命令队列3.内核的执行——NDRange 三、OpenCL存储器模型1.存储器区域2.存储器对象3.主机与设备的数据交互 总结 前言 通过【OpenCL基础 一】因源&#xff0c;我们了解了OpenCL的起源和应用场景。在异构并行平台上…

HTTP文件服务

在工作中&#xff0c;往往会需要将文件同时共享给很多台电脑。 本篇介绍HHDESK的HTTP文件服务功能&#xff0c;通过浏览器&#xff0c;将本地资源共享给任意主机。 1 共享文件 首页——资源管理——服务端——“”&#xff0c;在弹出框中选择HTTP文件服务。 填写各项内容。…

计算一个四边形差值结构的稳定性

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让A中有4个1&#xff0c;B中全是0&#xff0c;统计迭代次数并排序。 其中有6组数据 差值结构 迭代次数 构造平均列 L E - - - 34838.43 1 - …

Swing程序设计(3)JDialog窗体

文章目录 前言一、JDialog窗体的介绍二、JDialog窗体的使用 1.JDialog的常用构造方法2.实例展示及分析总结 前言 JDialog窗体是窗体中的另一种类型的窗体&#xff0c;指对话框窗体。与JFrame窗体类似&#xff0c;绝大部分对于JFrame窗体使用的方法&#xff0c;对于JDialog窗体也…

多元共进|整合开发者社区资源,共建繁荣生态

谷歌致力于构建多元社区 促进行业内更多交流和联系 一起来了解 2023 Google 开发者大会上 谷歌如何以点及面 将资源辐射至开发者、数字人才和初创企业 持续赋能开发者社区生态 谷歌全球开发者社区计划的目的是与开发者同在&#xff0c;实现双向对话、互动和参与&#xff0…

Houdini19 命令行启动环境配置

在自动化流程中&#xff0c;通常都是从外部命令行启动 Houdini&#xff0c;而不是在软件里进行烘培和输出。完全体是通过类似 Jenkins 等自动化工具来启动 Houdini 自动生成流程。 我使用的 Houdini 版本为 19.5.640&#xff0c;对应的 Python 版本为 3.9 。 1、配置开发环境 …

Gitlab仓库部署

Gitlab仓库部署 一、Gitlab的概述1、gitlab介绍2、gitlab主要功能3、gitlab和github的区别 二、部署环境1、安装依赖环境2、安装Postfix邮箱3、Gitlab优势4、Gitlab工作流程 三、Gitlab部署过程1、Yum安装Gitlab2、配置gitlab站点URL3、启动并访问Gitlab 四、Gitlab具体操作1、…

挖到宝了!这个中文版SiteGPT竟然有那么多好处

如今数字时代蓬勃发展&#xff0c;信息非常丰富&#xff0c;但个性化互动和量身定制的反馈却相对匮乏。个性化AI工具的出现可以说是打破了窘境。随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;定制AI问答机器人成为了越来越多企业和组织的热门选择。这些智…

Zabbix监控部署项目

为什么选择Zabbix Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 面试常问 你用过哪些监控软件 zabbix …

linux的应用线程同步与驱动同步机制

同步机制 在 Linux 应用程序和内核中的驱动程序中&#xff0c;有一些常见的同步机制用于实现线程或进程之间的同步和数据访问保护。下面是它们的一些主要机制&#xff1a; Linux 应用程序中的同步机制&#xff1a; 互斥锁&#xff08;Mutex&#xff09;&#xff1a;用于保护共…

233062C++QTday5

实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xff1a;半…

【ArcGIS Pro二次开发】(67):处理面要素空洞

这个一个简单的小功能。 有些面要素可能会存在空洞&#xff0c;这个工具的目的就是获取面要素的空洞&#xff0c;或者去除空洞获取要素的边界。 这个功能其实在之前做拓扑功能的时候就已经有了&#xff0c;这次只是单独把它提取出来。因为有时候会单独用到这个功能。 一、要实…