来感受一下Python的简洁:遍历法(比较慢)
遍历法优化加强版:大于右上角最后一个元素 下移 否则左移动 注意特殊情况i>len(matrix)-1
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
i=0
while matrix[i][-1]<target:
i+=1
if i>len(matrix)-1:return False
return True if target in matrix[i] else False
终极加强版:二分法(对上一种的再次优化)
我们不再通过遍历查找’右上角‘元素 而是通过二分法查找 再在内部进行二分
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
m,n=len(matrix[0]),len(matrix)
l,r=-1,len(matrix)
while l+1<r:
mid=(l+r)//2
if matrix[mid][-1]>=target:#r指向右上角大于等于target的编号
r=mid
else:
l=mid#l指向右上角小于target的元素
if r==len(matrix):return False#特殊情况
l1,r1=0,len(matrix[r])-1
while l1<=r1:
mid1=(l1+r1)//2
if matrix[r][mid1]>target:
r1=mid1-1
elif matrix[r][mid1]<target:
l1=mid1+1
else:
return True
return False
新年快乐!在新的一年除了要好好刷算法 也要天天开心 坚持每日一题