面试题 10.09. 排序矩阵查找 题解
给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。
示例:
现有矩阵 matrix 如下:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
题解
因为它是有序的,所以从上到下,从左到右都是递增的,所以我们选用双指针的算法,确定一个方向减小,另一个方向增大,左下角和右上角都符合,我选的是左下角,往上走减小,往右走变大,超出边界说明就没有这个元素,返回flase,最后在开始判断一下特殊情况,数组没元素的这种情况
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int row = matrix.size();
if(!row) // 先判断有元素没
return false;
int col = matrix[0].size();
if(!col) //特判一下
return false;
int j = 0,i = row - 1;
while(1)
{
if(j >= col || i < 0)
return false;
if(matrix[i][j] == target)
return true;
else if(matrix[i][j] > target)
{
i--;
}
else{
j++;
}
}
}
};