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.
题意: 给一个2维德矩阵,矩阵数值在每一行上依次增大,在每一列依次增大,给一个目标值,要求判断该值是否在矩阵上。
Solution:
最简单的想法其实就是依次遍历矩阵上的每一行,然后判断是否相等,但是效率肯定比较慢,然后根据题意可以看出在矩阵M[rows-1][0]
上有一个规律,如果目标值小于该值,则值必定在行数小于rows-1的子矩阵,如果目标值大于该值,则必然在列数大于0的子矩阵,类似的情况在M[0][columns-1]
也存在。
代码:
bool searchMatrix(vector<vector<int>> &matrix, int target)
{
bool result=false;
if(matrix.size()==0)
{
return result;
}
int row=matrix.size();
int column=matrix[0].size();
int x=row-1;
int y=0;
while(x>=0&&y<=column-1)
{
if(matrix[x][y]==target)
{
return true;
}
else if(matrix[x][y]>target)
{
x--;
}
else if(matrix[x][y]<target)
{
y++;
}
}
return result;
}