我该如何克服这个TLE



我正在努力解决这个问题:给定一个整数数组numbers,我需要写一个函数closetNumbers(numbers),找出数组中任意两个整数之间的最小绝对差,并打印共享最小绝对差的一对整数。打印pairs[i,j]时,应先按i升序排列,然后按j升序排列。我编写的代码通过了一些测试,但我在大多数测试(隐藏测试(中都获得了TLE。我不知道为什么(也许嵌套循环是问题所在?(,但不管怎样,我都想不出如何使用嵌套循环。任何关于如何改进代码的建议或想法(或TLE消息的原因(都将不胜感激。

附上问题的描述,案例测试的列表,以及我的代码。

代码:

def closestNumbers(numbers):
numbers.sort()
d=abs(numbers[0]-numbers[1])
ans=[]
for j in range(len(numbers)):
for i in range(j+1, len(numbers)):
res_1=abs(numbers[j]-numbers[i])
if (res_1 == d):
ans.append(numbers[j])
ans.append(numbers[i])    
elif (res_1<d):
d=res_1
ans=[numbers[j],numbers[i]]


for k in range (0, len(ans), 2):
print (ans[k], ans[k+1])

return 0

任务描述测试用例结果列表+TLE消息

试试这个:

import math
from itertools import combinations
numbers = [2, 4, 6, 10]
def closestNumbers(numbers):
distance = math.pow(10, 6)
selected_pairs = []
for i in numbers:
if not (math.pow(-10, 9) <= i <= math.pow(10, 9)):
return
numbers.sort()
pairs = list(combinations(numbers, 2))
for pair in pairs:
new_distance = pair[1] - pair[0]
if (2 <= new_distance <= math.pow(10, 5)) and new_distance < distance:
selected_pairs = [pair]
distance = new_distance
elif (2 <= new_distance <= math.pow(10, 5)) and new_distance == distance:
selected_pairs.append(pair)
distance = new_distance
for selected_pair in selected_pairs:
print(f"{selected_pair[0]} {selected_pair[1]}")
closestNumbers(numbers)

最新更新