解法一:双重二分查找 class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n=matrix.length, m=matrix[0].length;int row1=0, row2=n-1, col1=0, col2=m-1;int row_mid, col_mid;while(row1<=row2){row_mid = (row1+row2)/2;while(col1<=col2){col_mid = (col1+col2)/2;if(matrix[row_mid][col_mid]==target){return true;}if(matrix[row_mid][col_mid]>target){col2 = col_mid-1;}else{col1 = col_mid+1;}}// 不在mid这一行,遗弃midcol1=0; col2=m-1;if(matrix[row_mid][col2]>=target){row2 = row_mid-1;}else{row1 = row_mid+1;}}return false;} } 注意: 内循环说明目标数不在mid这一行,后面判断遗弃mid这一行,在mid的上面或者下面查找。