Java教程

剑指 Offer 04. 二维数组中的查找

本文主要是介绍剑指 Offer 04. 二维数组中的查找,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

剑指 Offer 04. 二维数组中的查找

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

​ 解题思路:如果用暴力遍历方法的时间复杂度为O(m*n),这样算法显然没有利用到二维树每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序的特性,如下面所示的二维数组。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMnjXStK-1623546938805)(C:\Users\93432\AppData\Roaming\Typora\typora-user-images\image-20210612094825180.png)]

​ 我们不妨将其以右上角的顶点为轴向右旋转45度,看作一棵二叉树。

3 2 6 1 5 9 NULL 4 NULL 7 8 NULL NULL

​ 这就是一棵顺序二叉树,从根节点开始遍历,如果根节点的值比目标值大,就往左走,如果根节点的值比目标值小,就往右走,如果相等,就返回true,什么时候退出遍历呢,当走到NULL位置的时候,代码如下。

class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int i=matrix.length-1,j=0;
while(i>=0 && j<matrix[0].length){
if(matrix[i][j]>target)i--;
else if(matrix[i][j]<target)j++;
else return true;
}
return false;
}
}
这篇关于剑指 Offer 04. 二维数组中的查找的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!