图解LeetCode——剑指 Offer 04. 二维数组中的查找

简介: 图解LeetCode——剑指 Offer 04. 二维数组中的查找

一、题目

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

二、示例

2.1> 示例:

现有矩阵 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

三、解题思路

  • 根据题目描述,我们可以知道矩阵matrix中存储的整数规则为:

行规则】每一行都按照从左到右非递减 的顺序排序;

列规则】每一列都按照从上到下非递减 的顺序排序;

  • 那么以下图为例,如果我们从矩阵的左上角1”这个整数开始遍历的话,如果向右遍历,则所有值一定是大于或等于“1”的;如果向下遍历,则所有值也一定是大于或等于“1”的;那么如果我们要找一个target值判断其是否在matrix矩阵中时,如果target大于了当前遍历的节点matrix[i][j]时,即需要向右遍历去对比,也需要向下遍历对比,那么无疑这种算法并不好。
  • 而如果我们以矩阵的左下角18”这个整数开始遍历的话,如果向右遍历,则所有值一定是大于或等于“1”的;如果向上遍历,则所有值也一定是小于或等于“1”的;那么我们就很容易的根据与target值的对比,来决定是向右走还是向上走

  • 介绍完上面的解题思路,我们还是举例来看一下,如果要寻找target=16这个值是否在matrix矩阵中时,具体的操作请见下图所示:

四、代码实现

classSolution {
publicbooleanfindNumberIn2DArray(int[][] matrix, inttarget) {
inti=matrix.length-1, j=0;
while(i>=0&&j<matrix[0].length) {
if (matrix[i][j] >target) i--;
elseif (matrix[i][j] <target) j++;
elsereturntrue;
        }
returnfalse;
    } 
}


今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

相关文章
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
63 6
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
57 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
58 5
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
35 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
29 4
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
46 4
|
4月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
55 4
|
4月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
27 3
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
42 3
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
本文介绍了使用Python实现从上到下打印二叉树的解决方案,采用层次遍历的方法,利用队列进行节点的访问。
37 2