/* * 74.Search in a 2D Matrix * 12.5 by Mingyang * 这里面的对应挺巧的: * 这个就是将2D矩阵转化成1行数组的对应表。所以对于二分查找法的初始值为: * low=0,high=rows*columns-1(总共数值的个数,因为从0开始所以减1)。 * 为了能够方便在given 2D matrix找到需要比对的值 * 我们还是需要确定行数和列数,通过上表可以看出,行数是position/columns,而列数是position%columns, */ public boolean searchMatrix(int[][] matrix, int target) { if (matrix.length == 0 || matrix[0].length == 0 || matrix == null) return false; int rows = matrix.length; int cols = matrix[0].length; int low = 0; int high = rows * cols - 1; while (low <= high) {//一定要等号,因为可能存在low,high相等的情况下,还等于target int mid = (low + high) / 2; int midValue = matrix[mid / cols][mid % cols]; if (midValue == target) return true; else if (midValue < target) low = mid + 1; else high = mid - 1; } return false; }