题目链接 :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;
}
};