Note
两次二分查找,第一次二分是为了确定target可能在哪一行,第二次二分是为了确定target是否存在二维矩阵中。其中要注意,第一次二分后的right,就是它可能存在的行号。其他的,就注意vector<vector> vec的使用方法。vec.size()是一维长度,vec[n].size()是第n维长度。正常表示其中的元素就和普通的二维数组一样即可,即vec[m][n]。
class Solution {
public:
/**
* @param matrix: matrix, a list of lists of integers
* @param target: An integer
* @return: a boolean, indicate whether matrix contains target
*/
bool searchMatrix(vector<vector<int>> &matrix, int target) {
int len = matrix.size();
if (target > matrix[len - 1][matrix[len - 1].size() - 1] || target < matrix[0][0])
return false;
int mid, left = 0, right = len - 1;
while (left <= right)
{
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 t = right;
left = 0, right = matrix[t].size() - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (matrix[t][mid] == target)
return true;
else if (matrix[t][mid] < target)
left = mid + 1;
else
right = mid - 1;
}
return false;
}
};
来源:CSDN
作者:SakuraJI
链接:https://blog.csdn.net/qq_37701948/article/details/104093228