240 Search a 2D Matrix II
先确定行,在确定列。
Java
class Solution {
private boolean binarySearch(int[][] matrix, int target, int start, boolean vertical){
int left = start;
int right = vertical ? matrix[0].length - 1: matrix.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(vertical){
if(matrix[start][mid] < target){
left = mid + 1;
}
else if(matrix[start][mid] > target){
right = mid - 1;
}
else
return true;
}
else{
if(matrix[mid][start] < target){
left = mid + 1;
}
else if(matrix[mid][start] > target){
right = mid - 1;
}
else
return true;
}
}
return false;
}
public boolean searchMatrix(int[][] matrix, int target) {
if (matrix == null || matrix.length == 0)
return false;
int shortDim = Math.min(matrix.length, matrix[0].length);
for(int i = 0; i < shortDim; i ++){
boolean verticalFound = binarySearch(matrix, target, i, true);
boolean horizontalFound = binarySearch(matrix, target, i, false);
if(verticalFound || horizontalFound)
return true;
}
return false;
}
}