跳转至

74.搜索二维矩阵 (Medium)*

题目描述*

标签*

二分查找;

思路 & 代码*

这里保证了行首的元素大于上一行尾,所以可以先以行首元素二分,再在行内二分,时间复杂度 O(\log mn)。或者直接把二维转换成一维。

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

最后更新: July 23, 2022