这道题没什么好说的,没有太大的难度,很快就AC了。简单说一下思路:观察可知越往右下数越大,加上每一行最后一个数是该行最大值,因此可以根据列值减少搜索的列数。定义 i 为矩阵的行,j 为矩阵的列,初始化 i 为0,j 为最后一列。若目标值大于当前matrix [ i ][ j ] 时,说明此行不可能比目标值大,因此 i+1;若小于,则目标值必然不在此列,因此 j-1;若等于则输出。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if (matrix.size() == 0)
return false;
int row = matrix.size(), col = matrix[0].size();
int i = 0, j = col - 1;
while (i < row && j >= 0) {
if (matrix[i][j] == target)
return true;
else if (matrix[i][j] > target)
j--;
else
i++;
}
return false;
}
};