https://leetcode-cn.com/problems/search-a-2d-matrix-ii/
思路:做法太多了,最简单的暴力,复杂度
O
(
n
m
)
O(nm)
O
(
n
m
)
,或者依次考虑每行/每列,然后二分判断,复杂度
O
(
n
l
g
m
)
O(nlgm)
O
(
n
l
g
m
)
或者
O
(
m
l
g
n
)
O(mlgn)
O
(
m
l
g
n
)
。这里就说一下最巧妙的
O
(
n
+
m
)
O(n+m)
O
(
n
+
m
)
的做法,考虑以矩形右上角为起始点,那么我们可以比较
m
a
t
r
i
x
x
,
y
matrix_{x,y}
m
a
t
r
i
x
x
,
y
与
t
a
r
g
e
t
target
t
a
r
g
e
t
的大小关系:
-
前者大于后者,由于每一列从上至下是单调增的,因此这一列可以排除掉,令
y−
1
y-1
y
−
1
即可。 -
前者小于后者,由于每一行从左至右是单调增的,因此这一行可以排除掉,令
x+
1
x+1
x
+
1
即可。 - 前者等于后者,直接返回True。
当x、y越界时,说明没有找到解,那么返回False即可。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int n=matrix.size(),m=matrix[0].size();
int x=0,y=m-1;
while(x<n&&y>=0)
{
if(matrix[x][y]>target)
--y;
else if(matrix[x][y]<target)
++x;
else
return 1;
}
return 0;
}
};