74. 搜索二维矩阵
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
m = len(matrix)
if m == 0:
return False
n = len(matrix[0])
if n == 0:
return False
r = 0
while r < m:
if matrix[r][0] < target:
r += 1
elif matrix[r][0] == target:
return True
else:
break
r = r - 1 if r > m - 1 or matrix[r][0] > target else r
c = 0
while c < n:
if matrix[r][c] < target:
c += 1
elif matrix[r][c] == target:
return True
else:
break
return False
思路:
先找每行第一个数,再找这一行。
综上,时间复杂度O(m+n),空间复杂度是O(1)。
注意点:
又忘了用二分查找找有序数组!正确写法:
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
m = len(matrix)
if m == 0:
return False
n = len(matrix[0])
#二分查找
left, right = 0, m * n - 1
while left <= right:
pivot_idx = (left + right) // 2
pivot_element = matrix[pivot_idx // n][pivot_idx % n]
if target == pivot_element:
return True
else:
if target < pivot_element:
right = pivot_idx - 1
else:
left = pivot_idx + 1
return False