leetcode 74. 搜索二维矩阵(二分)

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

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-a-2d-matrix

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

猜你喜欢

转载自www.cnblogs.com/wz-archer/p/12616536.html