给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
Consider the following matrix:
[
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]
Given target = 5, return true.
Given target = 20, return false.
public class Solution {
public boolean Find(int target, int [][] array) {
if(array.length == 0)// 如果二维数组为空,直接返回false
return false;
for(int i=0;i<array.length;i++) {
for(int j=0;j<array[i].length;j++){
if(array[i][j] == target )
return true;
}
}
return false;
}
}
比如你要想找数字6,我们从数组矩阵右上角上的数字开始,右上角数字是7,而7>6
题目中二维数组的特性是从上到下递增,所以7所在的那列就不必去找了。
将7所在的所在的那列剔除掉,进入到下一列去比较。下一列的右上角是4,4<6
而按照二维数组的特性,数组是从左到右递增的,4已经小于6了,那么4左边的数肯定也小于6, 而 4 目前是右上角的数字,所以4所在的行就没必要去比较了。
将4所在的行删除掉,进入到下一行。可以看到目前右上角的数字是5了。我们只比较了两次,就已经剔除掉了一行一列了!斗宗强者,恐怖如此!
好,继续比较5和6,5由于小于6,按照之前的逻辑所以5所在这行剔除掉,进入到下一行。
而下一行中的右上角是6,最终我们找到了目标数字6。
最后看一下代码实现:
Java JS PY PHP C++
这里面有Java、PHP、JS、Python、C++五种实现,妈妈再也不用担心你看不懂其它语言了。为了方便你理解,我还顺便制作了动画的形式。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8