python算法练习题
作者:互联网
1、二维有序数组中查找一个数
在n*m数组中,每行递增,每列递增,设计代码,查找数组中是否有目标数
如矩阵
l=[
[1,4,7,11],
[2,5,8,12],
[3,6,10,16]
]
给定目标数9,返回false;给定目标数10,返回true。
思路:
从左下角或者右下角开始,从第一行开始,如对右上角的数字和目标进行对比,如果右上角比目标小,代表第一行都没有数字,可以从下一行开始;如果右上角数组和目标对比,如果右上角比目标大,代表右上角所在的一列,都比目标数字大,下一次可以从倒数第二列开始。一直缩小范围,直到找到或者找不到目标数。
def find_num(targ,list):
r,l = len(list),len(list[0])-1 #r为长度,l为列下标,所以l-1
i = 0
while 0 <= i <r:
print('i = %d' % i) #i为行的下标,打印下
if list[i][l] == targ:
return True
elif list[i][l] < targ and l>= 0:
print(list[i][l])
i += 1 #下移一行
elif list[i][l] > targ and l>= 0:
print(list[i][l])
l -= 1 #左移1列
elif l<0:
return False
return False
l=[
[1,4,7,11],
[2,5,8,12],
[3,6,10,16]
]
print(find_num(9,l))
标签:练习题,elif,python,list,目标,右上角,算法,数组,print 来源: https://www.cnblogs.com/ua-21/p/16376189.html