LeetCode系列74—搜索二维矩阵

题意

74. 搜索二维矩阵

题解

方法一:两次次二分查找

class Solution {
    
    
public:
    bool searchMatrix(vector<vector<int>> matrix, int target) {
    
    
        auto row = upper_bound(matrix.begin(), matrix.end(), target, [](const int b, const vector<int> &a) {
    
    
            return b < a[0];
        });
        if (row == matrix.begin()) {
    
    
            return false;
        }
        --row;
        return binary_search(row->begin(), row->end(), target);
    }
};

方法二:一次二分查找

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

参考

搜索二维矩阵

Supongo que te gusta

Origin blog.csdn.net/younothings/article/details/121449825
Recomendado
Clasificación