- 利用行内有序,n次二分查找
- 利用列内有序,不使用二分查找
- 利用所有条件
public class Solution {
public boolean Find(int target, int [][] array) {
if (array == null || array.length == 0 || array[0].length == 0) {
return false;
}
int x = array[0].length - 1;
int y = 0;
while (y < array.length) {
if (array[y][x] == target) {
return true;
} else if (array[y][x] < target) {
y++;
} else {
x = binarySearch(target, array[y]);
if (array[y][x] == target) {
return true;
} else {
y++;
}
}
}
return false;
}
public int binarySearch(int target, int[] row) {
int left = 0;
int right = row.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (row[mid] == target) {
return mid;
} else if (row[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
}