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;
    }
}

results matching ""

    No results matching ""