classSolution{publicbooleansearchMatrix(int[][] matrix,int target){// 使用二分查找// 将矩阵写入一个数组中 然后使用二分查找算法int[] a =newint[matrix.length * matrix[0].length];int k =0;// 将所有元素写入afor(int i =0; i < matrix.length; i++){for(int j =0; j < matrix[0].length; j++){
a[k++]= matrix[i][j];}}int low =0;int high = a.length -1;while(low <= high){int mid =(high - low)/2+ low;if(a[mid]== target){returntrue;}elseif(a[mid]> target){
high = mid -1;}elseif(a[mid]< target){
low = mid +1;}}returnfalse;}}
方法2
直接在二维数组上使用二分查找
classSolution{publicbooleansearchMatrix(int[][] matrix,int target){// 将二维矩阵的索引转换为一维数组的索引// 假设矩阵是m行n列// 那么(i,j)的绝对索引 idx = i * n + j // 那么知道idx 就可以知道 i = idx / n j = idx % nint m = matrix.length;int n = matrix[0].length;int left =0;int right = m * n -1;while(left <= right){int mid = left +(right - left +1)/2;int i = mid / n;int j = mid % n;if(matrix[i][j]== target){returntrue;}elseif(matrix[i][j]< target){
left = mid +1;}else{
right = mid -1;}}returnfalse;}}