图解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^)/ ~ 「干货分享,每天更新」

相关文章
|
10天前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
18 1
|
22天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
22天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
21 0
|
22天前
|
Go
golang力扣leetcode 剑指Offer II 114. 外星文字典
golang力扣leetcode 剑指Offer II 114. 外星文字典
24 0
|
22天前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
30 0
|
22天前
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
24 0
|
22天前
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
26 0
|
22天前
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
22 0
|
10天前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
18 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
10天前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
19 0