有点难度的简单题。
我的想法是观察最左下和最右上的元素:若左下元素大于target,则可以去掉左下元素所在的行(最后一行),否则去掉左下元素在的列(第一列);若右上元素大于target,则可以去掉右上元素所在的列(最后一列),否则可以去掉右上元素所在的行(第一行)。
如此反复知道只剩一个元素。
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int beginrow=0;
int endrow=matrix.size()-1;
int begincolumn=0;
int endcolumn=matrix[0].size()-1;
while(endcolumn>begincolumn||endrow>beginrow){
for(endrow;endrow>=beginrow;endrow--){
if(matrix[endrow][begincolumn]==target) return 1;
if(matrix[endrow][begincolumn]<target) break;
}
for(beginrow;beginrow<endrow;beginrow++){
if(matrix[beginrow][endcolumn]==target) return 1;
if(matrix[beginrow][endcolumn]>target) break;
}
for(endcolumn;endcolumn>=begincolumn;endcolumn--){
if(matrix[beginrow][endcolumn]==target) return 1;
if(matrix[beginrow][endcolumn]<target) break;
}
for(begincolumn;begincolumn<endcolumn;begincolumn++){
if(matrix[endrow][begincolumn]==target) return 1;
if(matrix[endrow][begincolumn]>target) break;
}
}
if(matrix[beginrow][begincolumn]==target) return 1;
return 0;
}
};