'''在一个二维数组中(每个一维数组的长度相同),
每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。'''
# 首先完成 二分查找
def binary_search(array, num):
length = len(array)
mid = length // 2
head = 0
tail = length - 1
while True:
if num == array[mid]:
print('the posi is {}'.format(mid))
return True
if head == mid:
if num != array[tail]:
print('No such number')
return False
else:
print('the posi is {}'.format(tail))
return True
if num > array[mid]:
print('bi find gt')
head = mid
mid = sum((tail, head)) // 2
if num < array[mid]:
print('bi find lt')
tail = mid
mid = sum((tail, head)) // 2
def with_in(array, num): # 判断是否在行内
print('with_ in running')
return True if num >= array[0] and num <= array[-1] else False
def solution(array, num):
# 首先确认这个数在二维矩阵的范围内:
length = len(array)
if num >= array[0][0] and num <= array[length - 1][-1]:
print('number is in ')
# 从中间行搜索处于哪一行, 原理和二分查找一样,只是判断逻辑时候使用一行的首尾来判断。
mid = length // 2
head = 0
tail = length - 1
print(head, mid, tail, array[mid], num)
while True:
if with_in(array[mid], num):
print('in the mid ??')
return binary_search(array[mid], num)
if head == mid:
return False if not with_in(array[tail], num) else True
if num > array[mid][-1]:
head = mid
mid = sum((tail, head)) // 2
if num < array[mid][-1]:
tail = mid
mid = sum((tail, head)) // 2
else:
print('the number is not within the scale')
return False
l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
num = 9
solution(l, num)
二维数组的搜索
最新推荐文章于 2021-01-09 15:10:20 发布