可视化图解算法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版本:https://www.bilibili.com/cheese/play/ep1372587
- Java版本:https://www.bilibili.com/cheese/play/ep1367843
- Golang版本:https://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 := row
j := 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版本:https://www.bilibili.com/cheese/play/ep1372587
- Java版本:https://www.bilibili.com/cheese/play/ep1367843
- Golang版本:https://www.bilibili.com/cheese/play/ep1364841
4.小结
根据题目的描述,二维数组中的元素有规律,因此可以通过二分法查找对应的目标值。具体操作方法为:从二维数组的左下角位置开始比较,如果比较值(数组元素)等于 目标值,找到,直接返回;如果比较值数组元素) 小于 目标值,向右移动;比较值数组元素) 大于 目标值,向上移动。

《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:
✅ 链表
✅ 二叉树
✅ 二分查找、排序
✅ 堆、栈、队列
✅ 回溯算法
✅ 哈希算法
✅ 动态规划
无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!
- Python编码实现:https://www.bilibili.com/cheese/play/ss897667807
- Java编码实现:https://www.bilibili.com/cheese/play/ss161443488
- Golang编码实现:https://www.bilibili.com/cheese/play/ss63997
对于数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:花似伊,柳似伊,花柳青春人别离。低头双泪垂 。

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