思路
遍历数组,区间分析,如果当前一维数组的左右值区间中可能包含target目标值,那么进行二分查找,如果不包含,那么continue。
其中需要注意,如果当前一维数组的最小数(第0个数)大于目标值target,那么直接宣布结束,返回false。
结果
耗时:143ms
占用内存:16900KB
代码
public boolean Find(int target, int [][] array) { // 用于判断二维数组是否是空,[[]]即为空。 if (array.length <= 0 || array[0].length <= 0) return false; for (int i = 0; i < array.length; i++) { // 如果当前数组的第一个数值小于目标值,那么将不会再有值与之匹配 if (array[i][0] > target) return false; // 如果目标值在该数组的开始->结尾内,那么使用二分查找进行查找 if (array[i][0] <= target && array[i][array[0].length - 1] >= target){ // 二分查找 int left = 0; int right = array[0].length - 1; int mid = left + ((right - left)>>1); while (left <= right){ if (array[i][mid] > target) right = mid - 1; else if (array[i][mid] < target) left = mid + 1; else { System.out.println("位置:(" + (i+1) + "," + (mid+1) + ")"); return true; } mid = left + ((right - left)>>1); } } } return false; }