剑指 Offer 04. 二维数组中的查找

//暴力法 时间复杂度 O(m * n)
//根据排序的规律观察,得到类似2叉搜索树的解法 O(m + n)
class Solution {
    public boolean findNumberIn2DArray(int[][] matrix, int target) {
        //判空
        if(matrix == null || matrix.length == 0) {
            return false;
        }
        //找一个右上角 或者 左下角的元素 , 我找右上角,定义它的坐标
        int i = 0,j = matrix[0].length - 1;
        //边界判断
        while(i < matrix.length && j >= 0){
            //右上角的元素 小于 目标值,要下移
            if(matrix[i][j] < target){
                i++;
                //右上角的元素 大于 目标值,要左移
            } else if(matrix[i][j] > target){
                    j--;
            //相等,则找到目标元素,返回        
            } else{
                return true;
            }
        }
        //没找到,返回false
        return false;
    }
}

 

posted @ 2020-12-12 12:31  peanut_zh  阅读(90)  评论(0编辑  收藏  举报