LeetCode:74. 搜索二维矩阵

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
 示例 :

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

这个题主要在于观察一下规律,如果从右上角顶点开始,那么满足:小于往左走,大于往下走,就像一颗二叉树,因此二分查找,比暴力法更优。

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        
        int height = matrix.length;
        int length = matrix[0].length;
        //二分查找,从matrix[0][length-1] 开始,大于当前值则往下走,反之往左走。
        int down = 0, left = length-1;

        while (down<height && left>=0){
            if(matrix[down][left]==target){
                return true;
            }

            if(matrix[down][left]>target){
                left--;
            }else {
                down++;
            }
        }

        return false;
    }
}

时间复杂度:O(log(m*n)),空间复杂度:O(1)

 

posted @ 2021-04-25 15:57  蜗壳吃虾米  阅读(46)  评论(0)    收藏  举报