在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
从题目意思就是每一行,每一列的数组都是有序的,按照数组下标的增长,数也在增大,只要分成每一行每一行的一维数组,或者分成每一列每一列的一维数组进行二分查找即可。只需判断好数组下标是否会越界,题目就过了。
public boolean Find(int target, int[][] array) {
//第一行,将每一列的数组都进行二分查找
for (int i = 0; i < array.length; i++) {
if (binarySearch(array[i], target)) {
return true;
}
}
return false;
}
public static boolean binarySearch(int arr[], int target) {
//判断数组长度是否大于0,长度长度为0,不进行查询,没有此条件会出现数组下标越界异常
if (arr.length >= 1) {
//判断所查找的数是否在当前数组的范围内,不在则不查询
if (arr[0] < target && arr[arr.length - 1] > target) {
int low = 0;
int high = arr.length;
//二分查找
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] > target) {
high = mid - 1;
} else if (arr[mid] == target) {
return true;
} else {
low = mid + 1;
}
}
return false;
}
//判断所查找的数是否等于边界值
else if (arr[0] == target || arr[arr.length - 1] == target) {
return true;
} else {
return false;
}
} else {
return false;
}
}