Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
- Integers in each row are sorted from left to right.
- The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
这是一个杨氏矩阵,即每一行是递增的,每一列也是递增的。根据递增性质,我们对每一行只搜索最后一个数,如果小于target那么前往下一行,如果大于target那么说明在这一行,于是前往前一列,直到找到该数。
class Solution {
public:
bool searchMatrix(vector<vector<int> > &matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
for(int row = 0, col = n-1; row < m && col >= 0;)
{
if(matrix[row][col] < target)
{
row++;
}
else if(matrix[row][col] > target)
{
col--;
}
else
return true;
}
return false;
}
};
这道题难度是medium,本来我打算先把easy难度的做完在考虑中等难度的。偶然看了七月算法的视频(排序查找实战),受益匪浅,决定对讲过的例题进行巩固消化,于是先把这道题做了,算法思路来源于曹博,学习了!