题目难度: 中等
原题链接
今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~
给定 M×N 矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。
[
[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]
]
O(RC)
, 后者有所优化, 达到了 O(RlogC)
. (R
和 C
分别代表行和列的数目)(r,c)
, 那么它和 target 的关系可以分为下面三种情况:
O(R+C)
O(R+C)
: 循环每次要么行号-1, 要么列号+1, 最多只用循环 R+C 次O(1)
: 只使用了几个常数空间的变量class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
# 左下角开始+每次排除一行或一列
if not matrix:
return False
rows, cols = len(matrix), len(matrix[0])
# 起点为左下角
r, c = rows - 1, 0
while r >= 0 and c < cols:
if matrix[r][c] > target:
# 大于target, 向上
r -= 1
elif matrix[r][c] < target:
# 小于target, 向右
c += 1
else:
# 找到target, 返回True
return True
# 遍历整个矩阵都找不到, 返回False
return False
大家可以在下面这些地方找到我~
我的 GitHub
我的 Leetcode
我的 CSDN
我的知乎专栏
我的头条号
我的牛客网博客
我的公众号: 算法精选, 欢迎大家扫码关注~