[英]Python-Finding the amount of neighbours given a list
问题陈述在号码线上有N座房屋(一个号码可以有更多座房屋)。 如果两间房子之间的距离小于给定D的距离,则称它们为邻居。(两间具有相同编号的房子之间的距离为一)求出所有邻居的数量。
从数学上讲,问题可以归结为这一点。 给定一个多重集N和一个数字D,找出它们之间的距离小于D的房屋数量
def main():
number_of_ppl,distance=map(int, input().split())
inputs=map(int,input().split())
numbers=sorted(inputs)
counter=0
sum=0
for x in range(0,len(numbers)):
for y in range(i+1,len(numbers)):
if abs(numbers[x]-numbers[y])<=distance:
counter +=1
else:
break
sum+=counter
counter=0
print(sum)
main()
该代码有效,但是由于时间不足,它在8个测试案例中的3个失败。 我有什么想念的吗? 我怎样才能使这种算法更快? 我尝试使用字典,但结果相同
PS如果有帮助,我可以在此程序失败的地方发布测试用例
您当前的代码不完整,但似乎您正在执行2个循环,如果距离足够大,则需要O(n ^ 2)来运行。 可以将其减少为O(n log n)。 请注意,当您依次迭代数字时,当您对arr [i]的邻居进行分析时,当查看arr [i + 1]的邻居时,它们将是相同的+也许更多。
def main():
number_of_ppl,distance=map(int, input().split())
inputs=map(int,input().split())
numbers = sorted(inputs)
sum = 0
pointer = 0
for idx, number in enumerate(numbers):
while pointer < len(numbers) and number + distance >= numbers[pointer]:
pointer += 1
sum += (pointer - idx)
print(sum)
main()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.