public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length == 0)
return false;
int m = matrix.length;
int n =matrix[0].length;
return binarySearch(0,m*n-1,target,n,matrix);
}
private boolean binarySearch(int l, int r, int target, int n, int [][] matrix) {
if(l > r)
return false;
int mid = (l + r) / 2;
int[] indexes = convertIndexTo2D(mid,n);
if(matrix[indexes[0]][indexes[1]] == target)
return true;
else if (matrix[indexes[0]][indexes[1]] < target)
return binarySearch(mid+1,r,target,n,matrix);
else
return binarySearch(l,mid-1,target,n,matrix);
}
private int[] convertIndexTo2D(int index, int n) {
int x = index / n;
int y = index % n;
return new int[]{x,y};
}