在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 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。
限制:
0 <= n <= 1000
0 <= m <= 1000
这道题感觉以前做过了,这次看leetcode居然发现没做,好吧,那就再做一次
这道题的思路还是非常清晰的,观察二维数组的左上角,从这里开始。
可以发现,如果target小于开始点,只能在开始点左边,而如果大于则在下面,那么通过这个规律即可很快的查找了,时间复杂度比较好,O(n+m)
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int row=matrix.size();
if(row==0) return false;
int column=matrix[0].size();
if(column==0) return false;
int x=0,y=column-1;
while(target!=matrix[x][y]){
if(target>matrix[x][y]){
x++;
if(x>=row) return false;
continue;
}
else if(target<matrix[x][y]){
y--;
if(y<0) return false;
continue;
}
}
return true;
}
};