繁体   English   中英

Python-查找给定列表的邻居数量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM