当前位置: 首页 > news >正文

可视化图解算法41:搜索二维矩阵(二维数组中的查找)

1. 题目

  牛客网 面试笔试TOP101     |      LeetCode 74. 搜索二维矩阵

描述

在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

[

[1,2,8,9],

[2,4,9,12],

[4,7,10,13],

[6,8,11,15]

]

给定 target = 7,返回 true。

给定 target = 3,返回 false。

数据范围:矩阵的长宽满足 0 ≤n,m≤500 , 矩阵中的值满足 0 ≤val≤109 进阶:空间复杂度 O(1),时间复杂度 O(n+m)

示例1

输入:

7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

返回值:

true

说明:

存在7,返回true    

示例2

输入:

1,[[2]]

返回值:

false

示例3

输入:

3,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

返回值:

false

说明:

不存在3,返回false    

2. 解题思路

根据题目的描述,二维数组中的元素有规律:一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。

由于二维数组元素有序(递增排序),因此可以通过二分法(二分法可以查找二维数组中的元素)来实现元素的查找。具体步骤如下:

从二维数组的左下角位置开始比较,如果比较值(数组元素)等于 目标值,找到,直接返回;如果比较值数组元素) 小于 目标值,向右移动;比较值数组元素) 大于 目标值,向上移动。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:Python数据结构LeetCode笔试面试算法_哔哩哔哩_bilibiliPython数据结构LeetCode笔试面试算法,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1372587

  • Java版本:LeetCode数据结构笔试面试算法-Java版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Java版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1367843

  • Golang版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364841

3. 编码实现

核心代码如下:

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param target int整型* @param array int整型二维数组* @return bool布尔型*/
func searchMatrix(target int, array [][]int) bool {if len(array) == 0 {return false}// 1. 定义变量row := len(array) - 1       //行column := len(array[0]) - 1 //列//数组的左下角位置i := rowj := 0// 2. 通过循环在二维数组中查找目标值for i >= 0 && j <= column {tmp := array[i][j] //待比较的值if tmp == target {return true //比较值 等于 目标值,找到,直接返回} else if tmp < target {j++ //比较值 小于 目标值,向右移动} else {i-- //比较值 大于 目标值,向上移动}}return false
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:Python数据结构LeetCode笔试面试算法_哔哩哔哩_bilibiliPython数据结构LeetCode笔试面试算法,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1372587

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367843

  • Golang版本:LeetCode数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibiliLeetCode数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364841

4.小结

根据题目的描述,二维数组中的元素有规律,因此可以通过二分法查找对应的目标值。具体操作方法为:从二维数组的左下角位置开始比较,如果比较值(数组元素)等于 目标值,找到,直接返回;如果比较值数组元素) 小于 目标值,向右移动;比较值数组元素) 大于 目标值,向上移动。


《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:

        ✅   链表

        ✅   二叉树

        ✅   二分查找、排序

        ✅   堆、栈、队列

        ✅   回溯算法

        ✅   哈希算法

        ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:哔哩哔哩_bilibili

  • Java编码实现:哔哩哔哩_bilibili

  • Golang编码实现:哔哩哔哩_bilibili

对于数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:花似伊,柳似伊,花柳青春人别离。低头双泪垂 。

相关文章:

  • OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution
  • 批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
  • Linux 判断是否有未挂载的盘 分区挂载 (挂载所有大小的盘,包括挂载超过2T的盘)
  • Qt框架核心组件完全指南:从按钮交互到定时器实现
  • Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
  • 基于STM32的光照测量报警Proteus仿真设计+程序设计+设计报告+讲解视频
  • 供应链风险管理中,企业如何识别关键风险因素?
  • 【C++】模版(1)
  • 机器学习--特征工程具体案例
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(4)
  • WPF Data Binding 及经典应用示例
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
  • 【占融数科-注册/登录安全分析报告】
  • Kotlin Compose Button 实现长按监听并实现动画效果
  • Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析
  • 深度学习---模型预热(Model Warm-Up)
  • 【实战】GPT-SoVITS+内网穿透:3分钟搭建可公网访问的语音克隆系统
  • 苍穹外卖 - Day03
  • 【AI News | 20250519】每日AI进展
  • 深度强化学习 | 基于SAC算法的移动机器人路径跟踪(附Pytorch实现)
  • 新华每日电讯:把纪律的螺丝拧得紧而又紧
  • 老旧小区加装电梯后续维护谁负责?上海:各区属房管集团托底保障
  • 古稀之年的设计家吴国欣:重拾水彩,触摸老上海文脉
  • 台湾关闭最后的核电,岛内担忧“非核家园”缺电、涨电价困局难解
  • 玛丽亚·凯莉虹口连唱两夜,舞台绽放唤醒三代人青春记忆
  • 海昏侯博物馆展览上新,“西汉帝陵文化展”将持续展出3个月