总结:
答案里面给了两种方法,一种是两次二分查找
一种是一次二分查找
我这个算是两次二分查找
如果写一次二分查找,相当于拼接成了一个一维数组
def fun1(matrix,target):
'''
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
这个一看,如果你给他转化成一个一维数组
那么,就是一个升序的数组,直接二分查找就好
所以第一种思路:转化成一维数组,进行二分查找
:param matrix:
:param target:
:return:
'''
def fun2(matrix,target):
'''
上面属实是有点蠢
如果我都转化成一维数组(又要开空间,又要重新二分)
何不如直接的顺序查找呢?
所以方法二:直接顺序查找
:param matrix:
:param target:
:return:
'''
def fun3(matrix,target):
'''
二分查找
这个二分我觉得是什么样子的?
:param matrix:
:param target:
:return:
'''
m,n=len(matrix),len(matrix[0])
shang=0
xia=m-1
while shang<=xia:
shuzu=matrix[(shang+xia)//2]
l=0
r=n-1
while l<=r:
mid=(l+r)//2
if shuzu[mid]==target:
return True
elif shuzu[mid]<target:
l=mid+1
else:
r=mid-1
if target>shuzu[-1]:
shang=(shang+xia)//2+1
elif target>shuzu[0]:
return False
else:
xia=(shang+xia)//2-1
return False
print(fun3([[1,3,5,7],[10,11,16,20],[23,30,34,60],[71,81,91,100]]))