直接用搜索二维矩阵Ⅱ的代码可以直接过掉
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m=matrix.size()-1;
int n=matrix[0].size()-1;
int x=0,y=n;
while(x<=m&&y>=0)//从右上角往左下角搜索,当前值大于目标值 y--,小于目标值则X++;
{
if(matrix[x][y]==target)
{
return true;
}
if(matrix[x][y]>target)
{
y--;
}
else x++;
}
return false;
}
};
我们再练习一下二分吧在这里:
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int hang = -1;
int n = matrix.size();
for(int i = 0; i < n; i++) {
// 判断最后一行或者检查到合适的行
if (i == n-1 || (matrix[i][0] <= target && matrix[i+1][0] > target)) {
hang = i;
break;
}
}
// 如果没找到合适的行,直接返回 false
if (hang == -1) return false;
int l=0,r=matrix[0].size()-1;
while(l<r)
{
int mid=(l+r+1)>>1;
if(matrix[hang][mid]>target) r=mid-1;
else l=mid;
}
if(matrix[hang][r]!=target) return false;
return true;
}
};
然后就是可以进行数组拼接再二分。
然后就是找合适的行的时候,也可以用二分 时间复杂度就会从O(n)变为O(logn)