(LeetCode 热题 100) 74. 搜索二维矩阵(二分查找)

题目:74. 搜索二维矩阵

(LeetCode 热题 100) 74. 搜索二维矩阵(二分查找)_第1张图片
(LeetCode 热题 100) 74. 搜索二维矩阵(二分查找)_第2张图片
方法一:数组按行拼接为一个不下降的一维数组。采用二分查找,时间复杂度0(lognm)。

C++版本:

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int n=matrix.size(),m=matrix[0].size();
        int l=0,r=n*m-1;
        while(l<=r){
            int mid=(l+r)/2;
            if(matrix[mid/m][mid%m]<target){
                l=mid+1;
            }else if(matrix[mid/m][mid%m]>target){
                r=mid-1;
            }else{
                return true;
            }
        }
        return false;
    }
};

JAVA版本:

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int n=matrix.length,m=matrix[0].length;
        int l=0,r=n*m-1;
        while(l<=r){
            int mid=(l+r)/2;
            if(matrix[mid/m][mid%m]<target){
                l=mid+1;
            }else if(matrix[mid/m][mid%m]>target){
                r=mid-1;
            }else{
                return true;
            }
        }
        return false;
    }
}

方法二:从右上角按行和列同时查找,时间复杂度为0(n+m)。
C++版本

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int n=matrix.size(),m=matrix[0].size()-1;
        int i=0,j=m-1;
        while(i<n&&j>=0){
            if(matrix[i][j]>target){
                j--;//说明答案在他们的左侧
            }else if(matrix[i][j]<target){
                i++;//答案在下面
            }else{
                return true;
            }
        }
        return false;
    }
};

JAVA版本:

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

你可能感兴趣的:(java版刷题,LeetCode,热题,100,LeetCode,leetcode,矩阵,算法,c++,java)