gpt4 book ai didi

algorithm - 找到彼此之间的距离是一个数的倍数的点的子集

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:03 25 4
gpt4 key购买 nike

问题:给定一个数组A它代表一条线上的点,例如[5,-4,1,3,6] , 和一个数字 M=3 , 找到 A 内的最大点子集彼此之间的距离是 M 的倍数.

在这个例子中,两个可能的子集是[-4,5] (距离 9)和 [3,6] (距离 3)。

显而易见的蛮力解决方案是计算 O(N^2) 中每对点之间的距离时间,然后通过逐步构建子集来构建一组候选对象。

有没有更高效的解决方案?

最佳答案

遍历数组中的数字并计算每个数字的模数 M,然后按结果分组。最大的群是最大的子集。

例如[5,-4,1,3,6] 会给出 [2,2,1,0,0]

您必须注意如何处理负数,负数的模运算定义为 differently in some languages (例如 PHP)给其他人,但您希望 mod(-4, 3) 的计算结果为 2,而不是 -1。对于负数,您可以将其计算为 (M - (-x mod M)) mod M

您可以通过存储包含数字的列表的 HashMap 来有效地对数字进行分组,以模数为键。

关于algorithm - 找到彼此之间的距离是一个数的倍数的点的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40964005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com