题目描述:
先写一个二分查找函数,二分查找函数的返回写成中间数的索引。
步骤如下:
1、先二分查找第一列(如果有的话),返回第一列小于等于target的索引。
2、如果对应值不为target,就开始使用二分法遍历索引值前的每一行(如果有的话)。
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
line_list = []
#判断不空
if len(matrix) == 0:
return False
for i in range(len(matrix)):
#判断不空
if len(matrix[i]) == 0:
continue
line_list.append(matrix[i][0])
row_sign = divide_sick(line_list,target)
if len(matrix[row_sign]) == 0:
return False
if matrix[row_sign][0] == target:
return True
else:
for j in range(row_sign + 1):
#判断不空
if len(matrix[j]) == 0:
continue
line_sign = divide_sick(matrix[j],target)
if matrix[j][line_sign] == target:
return True
return False
def divide_sick(a,target):
min_num = 0
max_num = len(a)
mid_mun = int(len(a)/2)
while min_num != mid_mun:
if a[mid_mun] < target:
min_num = mid_mun
mid_mun = int((max_num + min_num)/2)
elif a[mid_mun] > target:
max_num = mid_mun
mid_mun = int((max_num + min_num)/2)
elif a[mid_mun] == target:
return mid_mun
return mid_mun