Loading

240. [数组]二维列表中的查找

240. 二维列表中的查找

方法一:线性查找

线性查找的逻辑巧妙,主要利用了题目中的顺序:“从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序”。这个题解是从左下角开始遍历的,当然从右上角也是可以的。

img

class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        if(matrix.length == 0){
            return false;
        }
        int n = matrix.length, m = matrix[0].length;
        int x = n - 1, y = 0;
        while(x >= 0 && y < m){
            if(target == matrix[x][y]){
                return true;
            } else if(target > matrix[x][y]){
                y++;
            } else {
                x--;
            }
        }
        return false;
    }
}

方法二:逐行二分查找

二分查找就比较基本了,比暴力少快一些,但没有线性搜索来得快。

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int n = matrix.length;
        for(int i = 0; i < n; i++){
            if(binarySearch(matrix[i], target) == 1){
                return true;
            }
        }
        return false;
    }
    private int binarySearch(int[] arr, int target){
        int left = 0, right = arr.length;
        while(left < right){
            int mid = (left + right) / 2;
            if(arr[mid] == target){
                return 1;
            } else if(arr[mid] > target){
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }
}
posted @ 2020-10-24 11:28  上海井盖王  阅读(110)  评论(0)    收藏  举报