力扣 hoot100 搜索二维矩阵

题目链接https://leetcode.cn/problems/search-a-2d-matrix/?envType=study-plan-v2&envId=top-100-liked

思路:

这道题其实就是将一个一维数组折叠成了一个二维数组,我们直接将它展开为一维数组就好了。

具体而言,可以用一个类把下标给包装一下(将二维坐标对外包装成一维),这样直接用二分查找的代码查就行了,这种做法整体还是比较优雅的。

代码:

cpp 复制代码
class MatrixArray{
private:
    vector<vector<int>> *matrix;
    int m,n;
public:
    MatrixArray(vector<vector<int>>* matrix){
      this->matrix=matrix;
      m=matrix->size();
      n=(*matrix)[0].size();
    }
    int size(){return m*n;}
    int operator [](int p){
      int i=p/n,j=p%n;
      return (*matrix)[i][j];
    }
};
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        MatrixArray myMatrix(&matrix);
        //binary search
        int l=0,r=myMatrix.size(),mid;
        while(l<r){
          mid=(l+r)/2;
          if(myMatrix[mid]==target)return true;
          if(myMatrix[mid]<target)l=mid+1;
          else r=mid;
        }
        return false;
    }
};