思路:
因为二维数组是从左到右,从上到下递增的,并且每行的第一个整数大于前一行的最后一个整数,所以我们从右上角(第一行的最后一个元素)开始查找,如果该元素小于target,那么我们就找下一行的最后一个元素,如果该元素大于target,那么target的值如果在二维数组中存在的话一定就在当前行
我们用二分查找法对当前行元素进行查找,如果找到就返回true,找不到则直接返回false
代码:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int rows=matrix.size();//二维数组的行数
int columns=matrix[0].size();//二维数组的列数
int i=0;
int j=columns-1;
while(i<rows){
if(matrix[i][j]==target){//如果当前行的最后一个元素正好等于target,返回true,
return true;
}
else if(matrix[i][j]>target){//当前行的最后一个元素大于target,那么目标值如果存在就在第i行,对第i行的元素进行二分查找搜索是否有值为target的元素
int l=0,r=j-1; //定义左右边界
while(l<=r){
int mid=l+(r-l)/2;
if(matrix[i][mid]==target) return true;//找到就返回true
else if(matrix[i][mid]>target){
r=mid-1;
}
else{
l=mid+1;
}
}
return false;//当前行没有找到值为target的元素就返回false
}
else{//当前行的最后一个元素大于target,去下一行的最后一个元素再次进行比较
i++;
}
}
return false;
}
};