题目:搜索二维矩阵

解法一:

把二维矩阵转入一维数组,再对这个数组进行二分查找

空间、时间复杂度都为O(M * N)

 1bool searchMatrix(vector<vector<int>>& matrix, int target)
 2{
 3    std::vector<int> vec;
 4    vec.reserve(matrix.size() * matrix[0].size());
 5    for(auto row : matrix)
 6    {
 7        for(auto element : row)
 8        {
 9            vec.push_back(element);
10        }
11    }
12    return std::binary_search(vec.begin(), vec.end(), target);
13}
<font style="background-color:#FBDE28;">解法二:</font>

核心公式:a[ i ]=matrix [ i / n ][ i mod n ]

实际上并不需要再开辟一个M*N的空间用于存储二维矩阵,可以直接根据一维数组下标与行列的关系找到对应元素

 1bool searchMatrix(vector<vector<int>>& matrix, int target)
 2{
 3    int rows = matrix.size(), cols = matrix[0].size();
 4    int left = 0, right = rows * cols;
 5    while(left < right)
 6    {
 7        int mid = left + (right - left) / 2;
 8        int x = matrix[mid / cols][mid % cols];
 9        if(target == x)
10            return true;
11        else if(x < target)
12            left = mid + 1;
13        else if(target < x)
14            right = mid;
15    }
16    return false;
17}