剑指offer之二维数组中的查找
问题描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
问题分析:
二维数组的行与列都是按照递增排好序的,因此可以想到用二分法。但对于此题用一维数组的二分法行不通。因此找到如何进行二分的条件非常重要。
把二分值定在左下或右上是一个可行的方法(参考的是牛客上的解题方法)
public class Solution {
public boolean Find(int target, int [][] array) {
if(array.length == 0)
return false;
if(array[0].length == 0)
return false;
int c = array[0].length-1;
int r = 0;
while(c >= 0&& r <= (array.length-1)){
if(target > array[r][c])//目标数若比右上角的数大,说明该行的数都小了,向下移一行
r++;
else if(target < array[r][c])//目标数若比右上角的数小,说明该列的数都大了,向左移一行
c--;
else//相等,找到,返回true
return true;
}
return false;//退出循环,没找到
}
}