题目大意:要求在一个二维矩阵中搜索一个数,要求是时间尽可能少。说明:二维矩阵是从左到右,从上到下依次增大的。
题目分析:本题如果用挨个遍历的话,显然没有利用上矩阵中的有序关系。我的做法是:将target的值与每行的最后一个数进行比较,若最后一个数小于target,那么还要往下搜索,将搜索的行边界的上界x设为下一行的下标;反之,将行边界的下界y设为当前行,并退出循环。
最后,若x改变了,表示target大于第一行所有的值,但是此时y=0,表示y还没改动过,也就是target的值大于最后一行的最后一个值,也就是矩阵中没有这个元素。其他情况下,循环结束后的x和y的值都是相等的。
代码展示:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
if(m==0)
return false;
int n = matrix[0].size();
if(n==0)
return false;
int x = 0;
int y = 0;
for(int i=0;i<m;i++){
if(matrix[i][n-1]<target)
x = i+1;
else if(matrix[i][n-1]>target){
y = i;
break;
}
else
return true;
}
if(x!=0 && y==0)
return false;
for(int i=0;i<n;i++){
if(matrix[x][i]==target)
return true;
}
return false;
}
};