二维数组中的查找如何实现?看图!

栏目: IT技术 · 发布时间: 5年前

内容简介:在看点一下

点击关注上方“ 图解面试算法 ”,

设为“置顶或星标”,一起刷 LeetCode。

二维数组中的查找如何实现?看图! 作者:程序员吴师兄

今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 04 . 二维数组中的查找

题目链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/

一、题目描述

在一个 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

二、题目解析

仔细观察矩阵,可以发现: 左下角元素 为所在列最大元素,所在行最小元素

如果 左下角元素 大于了目标值,则目标值一定在该行的上方, 左下角元素所在行可以消去。

如果 左下角元素 小于了目标值,则目标值一定在该列的右方, 左下角元素所在列可以消去。

具体操作为从矩阵左下角元素开始遍历,并与目标值对比:

  • matrix[i][j] > target
    i--
    i
    
  • matrix[i][j] 
    			
  • matrix[i][j] == target 时:返回 true。
  • 如果越界,则返回 false。

三、动画描述

四、图片描述

二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.001
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.002
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.003
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.004
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.005
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.006
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.007
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.008
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.009
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.010
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.011
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.012
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.013
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.014
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.015
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.016
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.017
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.018
二维数组中的查找如何实现?看图!
面试题04. 二维数组中的查找.019

五、参考代码

class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
//初始化 i 和 j 为数组左下角元素
int i = matrix.length - 1,
int j = 0;
//如果 i 和 j 没有越界继续判断
while(i >= 0 && j < matrix[0].length){

if(matrix[i][j] > target){
//行索引向上移动一格(即 i-- ),即消去矩阵第 i 行元素
i--;
}else if(matrix[i][j] < target){
//列索引向右移动一格(即 j++ ),即消去矩阵第 j 列元素
j++;
}else{
//找到目标值,直接返回 ture
return true;
}
}
//没有找到目标值,返回 false
return false;
}
}

六、复杂度分析

时间复杂度

时间复杂度为 O(M+N),其中,N 和 M 分别为矩阵行数和列数,此算法最多循环 M + N 次。

空间复杂度

空间复杂度为 O(1)。

七、相关标签

  • 数组

  • 双指针

  • 二分法

后台回复"500"可参与抽书活动哈

奶糖猫   

优秀的人都在看   

二维数组中的查找如何实现?看图!

在看点一下


以上所述就是小编给大家介绍的《二维数组中的查找如何实现?看图!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

暗趋势

暗趋势

王煜全 / 中信出版集团 / 2019-1 / 59元

《暗趋势》由得到“全球创新260讲”专栏主讲人王煜全,为你揭示藏在科技浪潮中的商业机会,教你获得把握趋势的能力,发现小趋势,抓住大机遇。 《暗趋势》聚焦于改变你生活和未来的产业,深度解读人工智能、混合现实、区块链、生物医疗等你必须关注的科技行业,并分析新科技给企业和个人带来的发展机遇,前瞻性提出企业和个人的思维与行动应对策略。 王煜全作为全球科技前哨侦察兵,以其每年5亿元的科技投资及2......一起来看看 《暗趋势》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试