【发布时间】:2022-10-04 17:26:19
【问题描述】:
我有这个功能,它的任务是找出多少个数字,可以从列表中以这样的方式选择,任何两个选择的数字之间的差不大于 t。我怎样才能使它的时间复杂度为 O(nlogn)?
def find_numbers(num_list, t):
sorted_list=sorted(num_list)
counter=0
k=0
n=0
for i in range(len(sorted_list)):
for j in range(k, len(sorted_list)):
if sorted_list[j]-sorted_list[k]<=t:
counter+=1
else:
break
k+=1
if counter>n:
n=counter
counter=0
return n
它应该如何工作的一些例子
print(find_numbers([2, 7, 14, 11, 7, 15], 11)) # 5
print(find_numbers([4, 2, 7, 1], 0)) # 1
print(find_numbers([7, 3, 1, 5, 2], 2)) # 3
在第三个例子中,可以从列表[7,3,1,5,2]中选择三个数字:3、1和2,并且这些数字之间的差异最多为2。
【问题讨论】:
-
改掉使用
for index in range(len(list)):的习惯。使用for item in list:或for index, item in enumerate(list):
标签: python performance