问题描述
在一个二维整数数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,
输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
参数说明
int[][] array:二维数组
target:整数
存在返回true,否则返回false
暴力直接遍历整个二维数组
不做解释
public boolean Find1(int[][] array, int target) {
for (int arraya[] : array) {
for (int b : arraya) {
if (target == b) {
return true;
}
}
}
return false;
}
二分法
对于有序的数组,二分法无疑是最优的算法。将每一行的元素使用二分法查找元素。
// 将每一行的元素进行二分查找
public boolean Find2(int[][] array, int target) {
for (int i = 0; i < array.length; i++) {
int low = 0;
int high = array[i].length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (target > array[i][mid])
low = mid + 1;
else if (target <