在[a,b]间隔之间找到相同的数字

Find the same numbers between [a,b] intervals

本文关键字:数字 之间      更新时间:2023-10-16

假设我有3个连续数字

a = [1, 2, 3]
b = [2, 3, 4]
c = [3, 4]

然后,所有3个数组中出现的相同数字均为3。我的算法是在彼此中使用两个for循环检查相同的数组,然后将其推入另一个数组(我们称其为d(。然后

d = [2, 3] (d = a overlap b)

并再次使用它检查数组dc =>最终结果是1,因为在所有3个数组中只有1个数字。

e = [3] (e = c overlap d) => e.length = 1

除此之外,如果仅存在1个数组,则算法应返回数组的长度,因为其所有数字本身都出现。但是我认为上面的算法会花费太长时间,因为数组的数量可以达到10^5。因此,有更好的算法的想法?

,但我认为上面说的算法会花费太长时间,因为数组的数量可以达到10 5 。因此,有更好的算法的想法吗?

是的,由于这些是范围,因此您基本上想计算范围的相交。这意味着您可以计算列表的所有第一个元素的最大 m ,以及所有的最小值 n last列表的元素。然后, m n (都包含在内(之间的所有数字均为所有列表的成员。如果 m> n ,则这些列表中没有数字。

您不需要通过枚举第一个列表来计算重叠,并检查这些是最后一个列表的成员。由于这些是连续的数字,因此我们可以轻松找出重叠是什么。

简而言之,的重叠[a,...,b]> max( a c (,...,min( b d (],无需检查之间的元素。