剑指offer----二维数组中的查找

it2022-05-05  133

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

/** * 二维数组有序 * 1.首先判断target是否在一维数组的范围内,即target < array[][xLen-1] 且 target > array[][0] * 2.如果target小于一维数组的第一个数,则可以直接返回false * 3.因为数组一维二维皆有序,采用二分查找减小时间复杂度 * @param target * @param array * @return */ public boolean Find(int target, int[][] array) { int xLen = array[0].length, yLen = array.length; //增加xLen > 0 是为了判断空数组时防止出现数组越界异常 for (int i = 0; i < yLen && xLen > 0; i++) { if (target >= array[i][0] && target <= array[i][xLen-1]) { boolean flag = twoFind(target, array[i], 0, xLen - 1); if(flag == true) return flag; else continue; }else if (target < array[i][0]){ break; } } return false; } public static boolean twoFind(int target, int[] array, int start, int end) { int mid = (end + start) / 2; if (target == array[mid]) return true; if (end <= start && array[start] != target) return false; if (target > array[mid]) return twoFind(target, array, mid + 1, end); if (target < array[mid]) return twoFind(target, array, start, mid - 1); return false; }

 


最新回复(0)