题解 | #二维数组中的查找#
二维数组中的查找
http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e
public class Solution {
public boolean Find(int target, int [][] array) {
/*
首先是条件判断,如果这个二维数组的长度为0,说明数组为空,那么就不用再进行查找操作了。
直接返回false
*/
int m = array.length;
int n = array[0].length;
if (m == 0 || n == 0) {
return false;
}
/*
每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
这个特点很重要,本题能使用二分查找的思想就是基于这个特点。
思路就是二分查找从右上角开始,因为数组严格按照每行每列递增的顺序,
所以如果当前值大于目标值,我们需要往左边找,所以就是 r =r-1;
如果当前值小于目标值,我们需要往下找,所以就是 l =l+1;
如果当前值等于目标值,说明找到了,直接返回true;
当循环执行完毕后,还没有找到,说明该元素在数组中不存在,我们返回false就行。
*/
int l =0, r = n - 1;//r为右上角元素
while (l < m && r >= 0) {
if (array[l][r] == target) {
return true;
} else if (array[l][r] > target) {
-- r;
} else {
++ l;
}
}
return false;
}
}