Leetcode-每日一题【剑指 Offer 04. 二维数组中的查找】

news2024/10/2 6:28:28

题目

在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例:

现有矩阵 matrix 如下:

[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。

给定 target = 20,返回 false。

限制:

  • 0 <= n <= 1000
  • 0 <= m <= 1000

解题思路

1.题目要求我们判断数组中是否含有目标数,我们可以采用两个for循环去遍历数组进行判断,但是其实我们在认真读题后会发现还有一种更高效的方法。

2.题目告诉我们每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。

举个例子:

我们可以看到下面的数比上面的数大,右面的数比左面的数大。那我们可以从左下角进行查找,也就是从这个 18 开始,

 

 18是大于 5 的,那么因为18右面的数比18还要大,那么数字 5 必然不可能在 18 的右面,我们就标红右面的数,代表 5 不可能出现的区域,

这时 5 只可能出现在18的上面,那我们就让行的下标减 1,

 

此时指向的是数字 10,10 还是大于 5,那 5 也不可能出现在 10 的右面,我们继续将行的下标减1

 

当指向的数字是 3 是,3 小于 5了 ,那么 5 可会出现在 3 这一行,这时我们就要将列的下标加1,

 

然后就指向了 6,此时 6 是 大于 5 的 所以 5不可能出现在 6 的后面,我们只能将行的下标减 1,

 

此时指向的数字刚好是 5,等于我们的目标数字,也就表示我们找到了,返回true即可。

3.我们先设置两个变量 cols 和 rows ,来存储我们二维数组行的数量和列的数量,然后再设置两个变量 col 和 row 储存我们在遍历数组时元素的下标,因为我们是从左下角开始遍历,所以要让col = cols - 1,row = 0;也就是指向左下角的第一个元素。

4.然后我们就用while循环进行遍历,当target 大于我们的当前元素时,我们就让 列下标加 1,若target 小于我们的当前元素时,我们就让行下标减 1,如果两个条件都不满足则说明找到了与target相等的元素。若while()循环结束还没有返回,则代表数组中没有 target 元素,我们就返回 false。

代码实现

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if(matrix == null || matrix.length <= 0 || matrix[0].length <= 0){
            return false;
        }
        int cols = matrix.length;
        int rows = matrix[0].length;
        int col = cols - 1;
        int row = 0;

        while(col >= 0 && row < rows ){
            if(target > matrix[col][row]){
                row++;
            }else if(target < matrix[col][row]){
                col--;
            }else{
                return true;
            }
        }
        return false;

    }
}

测试结果

 

 

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

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

相关文章

机器学习基础之《特征工程(3)—特征预处理》

一、什么是特征预处理 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 处理前&#xff0c;特征值是数值&#xff0c;处理后&#xff0c;进行了特征缩放

学习笔记|C251|STC32G单片机视频开发教程(冲哥)|第三集:开发环境搭建和程序下载

文章目录 1.STC-ISP软件的下载2.STC32手册下载3.PDF阅读器下载4.学会PDF阅读器查阅手册5.跟着手册搭建C251开发环境Tips:如何同时安装Keil的C51、C251和MDK 6.程序包的下载7.第一个工程的编译和下载 原作者/主讲人&#xff1a;冲哥 原始视频地址 1.STC-ISP软件的下载 STC-ISP …

在线会议的线下战场:补齐产业故事里的第一个短板

过去几年时间里&#xff0c;在线会议产品以其互联网的强产品体验和线上办公的必选项属性站在了TO B风口上&#xff0c;但在水温变化的如今&#xff0c;这个冷却的赛道在增长之外&#xff0c;更迎来了新的审视&#xff1a;即用类互联网的打法&#xff0c;能否彻底渗透TO B市场&a…

weui 去掉输入框的边框 每一项目的边框删除

问题&#xff1a; 边框是通过before添加&#xff0c;如下源码是&#xff1a; .weui_cell:before {content: " ";position: absolute;left: 15px;top: 0;width: 100%;height: 1px;border-color:rgb(255 111 119);color: #D9D9D9;-webkit-transform-origin:0 0;transf…

AI代码生成助手Cursor、TabNine 、Cosy使用体验

AI代码助手好多都需要翻墙,chargpt,微软系统的Copilot, Cursor(基于gpt,需要翻墙) 。TabNine不翻墙但是免费版本只给生成单行代码,阿里的cosy功能比较弱甚至不能算ai。即使这样也能大大提高编码效率了&#xff0c; 使用了下&#xff0c;感觉AI编码助手真的是可以解决一部分问题…

2023值得关注的人工智能7大发展趋势

随着人工智能技术的不断创新和应用&#xff0c;我们可以看到人工智能在各个领域的应用越来越广泛。其中&#xff0c;有一些趋势特别值得我们关注。 1&#xff09;深度学习技术的发展 深度学习技术在图像识别、语音识别、自然语言处理等领域表现出色&#xff0c;随着硬件计算能…

怎么修改pdf文件中的文字?分享几种编辑方法

怎么修改pdf文件中的文字&#xff1f;PDF格式的文件通常具有很高的可读性和稳定性&#xff0c;但是如果需要修改其中的文字&#xff0c;就需要使用专门的PDF编辑器。本文将介绍几种PDF编辑的方法&#xff0c;下面就跟着我一起来看看这几款工具吧。 方法一&#xff1a;使用迅捷P…

最不透明的211!大幅度扩招!但数据分析太难做了!

一、学校及专业介绍 中国传媒大学&#xff08;Communication University of China&#xff09;&#xff0c;简称“中传”&#xff0c;位于首都北京市&#xff0c;是中华人民共和国教育部直属的信息传播领域行业特色大学&#xff0c;国家“双一流”建设高校&#xff0c;国家“21…

云计算——常见集群策略

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.什么是集群 二.集群策略 1.虚拟机HA 实现虚拟机高可用性通常涉及以下关键…

EtherCAT转Profinet网关连接西门子PLC与凯福科技总线步进驱动器通讯

西门子S7-1200/1500系列的PLC&#xff0c;采用Profinet实时以太网通讯协议&#xff0c;需要连接带EtherCAT的通讯功能的伺服驱动器等设备&#xff0c;就必须进行通讯协议转换。捷米特JM-EIP-RTU系列的网关提供了&#xff0c;快速可行的解决方案 捷米特JM-ECTM-PN在PROFINET一侧…

后端进阶之路——深入理解Spring Security配置(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

排序进行曲-v3.0

文章目录 小程一言归并排序步骤举例总结时间复杂度分析&#xff1a;空间复杂度分析&#xff1a;注意 应用场景总结 实际举例Other 代码实现结果解释 小程一言 这篇文章是在排序进行曲2.0之后的续讲&#xff0c; 这篇文章主要是对归并排序进行细致分析&#xff0c;以及操作。 希…

机器学习---概述(一)

文章目录 1.人工智能、机器学习、深度学习2.机器学习的工作流程2.1 获取数据集2.2 数据基本处理2.3 特征工程2.3.1 特征提取2.3.2 特征预处理2.3.3 特征降维 2.4 机器学习2.5 模型评估 3.机器学习的算法分类3.1 监督学习3.1.1 回归问题3.1.2 分类问题 3.2 无监督学习3.3 半监督…

平时工资不够用?推荐4种适合工作之余做的兼职副业!

你是否也曾经在为每个月的工资发愁&#xff1f;你是否想过做点副业来增加收入&#xff1f;现在很多上班族的工资&#xff0c;已经难以满足他们的生活需求了&#xff0c;很多人开始尝试通过副业来增加收入。那么上班族要如何寻找适合自己的副业呢&#xff1f;下面就给大家分享几…

Docker 网络模型使用详解 (1)Dockers网络基础

目录 环境准备 Dockers 网络基础 1.端口映射 查看随机映射端口范围 -p可以指定映射到本地端口 映射指定地址和指定端口 映射指定地址 宿主机端口随机分配 指定传输协议 端口暴露 容器互联 自定义网络 现在把container7加入到demo_net中 在启动一个容器加入到demo_net…

C++封装思想之一:封装(1.8W字详解)

目录 C封装 封装 封装的作用&#xff1a; C的封装 VS C封装&#xff1a; C语言&#xff1a; C语言&#xff1a; 类和对象 类的声明 权限修饰符&#xff1a;public、private&#xff08;set/get&#xff09;、protected 构造函数 默认构造函数&#xff08;无参构造函数…

服务器安装系统教程

虽然装好了显卡&#xff0c;但是机器运行一会&#xff0c;CPU就飙升到100%。找售后解决&#xff0c;也没有完全解决。所以这次试试换个别的系统是否能修复。 本来计划是后面组raid、重装系统的&#xff0c;得&#xff0c;又提前了。 这里说一下&#xff0c;这个流程未必是最好…

AI + 办公,超哇塞的5款办公神器!

一个好用的软件可以让我们节省时间&#xff0c;提高办公效率&#xff0c;小编就和大家分享5款提高办公效率的好软件&#xff0c;每一个都可以称作神器&#xff0c;最后一个绝了。 在数字化的时代&#xff0c;人工智能技术正在迅速地改变着我们的生活和工作方式。 当今社会&am…

加速国产化进程 | 重建大师精准满足信创替代需求

“信创”&#xff1a;即信息技术应用创新产业&#xff0c;旨在通过实现信息技术领域的自主可控&#xff0c;保障国家信息安全。 《“十四五”国家信息化规划》等国家政策中多次强调数据安全的重要性&#xff0c;明确要求到2025年行政办公及电子政务系统全部完成国产化替代&…

HTTPS实现原理

https是基于http和SSL/TLS实现的一个协议&#xff0c;他可以保证在网络上传输的数据都是加密的&#xff0c;从而保证数据安全。 接下来我们从http协议开始&#xff0c;提出想法并逐步进行分析&#xff0c;最终实现Https。 1. http协议是不安全的。 在https诞生之前&#xff…