2

我必须找到一种算法,可以找到两组数组之间的交集总量,而其中一个数组是排序的。

举个例子,我们有这两个数组,我们画直线指向对应的数字。 交点

这两个数组总共给了我们7 个交集

它存在什么样的算法来帮助我解决这个问题?

我使用了搜索按钮,但没有找到任何可以为我解决这个问题的东西。

谢谢

4

2 回答 2

1

给定两个数字 M 和 N,如果

  • 顶部 M 位于顶部 N 的右侧,底部 M 位于底部 N 的右侧
  • 上M在上N的左边,下M在下N的左边

在其他两种情况下:

  • 左上右下
  • 右上,左下

线确实相交。

在示例中,8 位于顶行所有 4 个数字的左侧,位于底部 3 个数字的右侧,因此 8 与三个数字相交。

5 在顶部 8 的右侧,底部 8 的左侧,给出一个交叉点。5 在顶部的 4 和 1 的左侧,在底部的 4 和 1 的右侧,再给出两个。所以 5 与三个数字相交。

请注意,我们计算了 5 和 8 的交集两次。事实上,每个路口都会被计算两次。如果完成该示例,您将计算 14 个交叉点。最后除以 2 得到答案。

于 2016-12-11T09:07:18.040 回答
-1

您可以将每一行表示为y=a+bx,然后通过比较它们的y值将每一行与其他行进行比较。

每条线与其他线最多有一个交点。

于 2016-12-11T08:25:25.693 回答