面试之基础算法题:判断目标数是否在二维有序数组中(Java版)
概述
给定一个二维数组和目标数字,数组的每行或者每列都是有序的,判断数字是否在二维数组里面。
如数组[[1, 3, 4, 7], [3, 5, 10, 20], [7, 8, 15, 30], [10, 15, 20, 50]]
,判断10是否在二维数字中。
分析
思路1:两次for循环,肯定可以解决问题,但时间复杂度是O(n^2)
。代码略。
思路2:
实现:
private static boolean findTarget(int[][] arr, int target) {
if (target < arr[0][0]) {
return false;
}
int length = arr.length;
for (int i = 0, j = length - 1; i < length && j > 0; ) {
if (arr[i][j] == target) {
return true;
} else if (arr[i][j] < target) {
i++;
} else {
j--;
}
}
return false;
}