济南中京网站建设公司js开发安卓app
题目链接:https://leetcode.cn/problems/search-a-2d-matrix/?envType=study-plan-v2&envId=top-100-liked
思路:
这道题其实就是将一个一维数组折叠成了一个二维数组,我们直接将它展开为一维数组就好了。
具体而言,可以用一个类把下标给包装一下(将二维坐标对外包装成一维),这样直接用二分查找的代码查就行了,这种做法整体还是比较优雅的。
代码:
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 searchint 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;}
};