LeetCode Day59 search a 2d matrix

先对第一列进行二分查找,判断在第几行
在对该行进行二分查找

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.empty()||matrix[0].empty()) return false;
        if(target<matrix[0][0]||target>matrix.back().back()) return false;
        int left=0,right=matrix.size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(matrix[mid][0]==target) return true;
            else if(matrix[mid][0]<target) left=mid+1;
            else right=mid-1;
        }
        int tmp=right;
        left=0;
        right=matrix[tmp].size()-1;
        while(left<=right){
            int mid=(left+right)/2;
            if(matrix[tmp][mid]==target) return true;
            else if(matrix[tmp][mid]<target) left=mid+1;
            else right=mid-1;
        }
        return false;
    }
};

实际上看做一位数组整个是有序的,可以只进行一次二分查找

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

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/85230829