Loading

LeetCode 74 搜索二维矩阵

LeetCode74 搜索二维矩阵

题目描述

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

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

样例

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

算法分析

\(O(logn + logm)\)

时间复杂度

Java代码

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        if(matrix.length == 0 || matrix[0].length==0)
            return false;

        int n = matrix.length;
        int m = matrix[0].length;
        //先找在第几行
        int l = 0;
        int r = n - 1;
        while(l < r){
            int mid = l + r + 1 >> 1;
            if(matrix[mid][0] <= target) l = mid;
            else r = mid - 1;
        }

        int row = r;

        l = 0; 
        r = m - 1;
        while(l < r){
            int mid = l + r >> 1;
            if(matrix[row][mid] >= target) r = mid;
            else l = mid + 1;
        }

        int col = r;
        return matrix[row][col] == target;
    }
}

posted @ 2020-11-17 19:06  想用包子换论文  阅读(88)  评论(0)    收藏  举报