题目描述:
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
方法一:
class Solution{
public:
bool searchMatrix(vector<vector<int>>&matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
int x = 0; //行
int y = n - 1; //列
while (x < m && y >= 0)
{
if (matrix[x][y] == target) return true;
if (matrix[x][y] > target)
{
y--;
}
else
{
x++;
}
}
return false;
}
};
自己写了个复杂无比的方法,最后还是没能通过,只好看题解了。
思想就是,每次在以矩阵的左下角为左下角、以(x,y)为右上角的矩阵中搜索target。
例如在上图中,一开始以18为左下角,(x,y)15为右上角搜索,如果要搜索20,那么由于(x,y)15比20小,依据矩阵的特性,15一行的左边的数字肯定都比20小,所以可以令x - 1;如果要搜索10,那么由于(x,y)15比10大,依据矩阵的特性,15一列的下方的数字肯定都比10大,所以可以令y - 1。
重复上述操作直至找到target或者搜索完整个矩阵。