【问题标题】:Maximum numbers of points that are in straight line O(N)直线上的最大点数 O(N)
【发布时间】:2025-12-02 16:15:02
【问题描述】:

问题说明我们收到一个元组数组,其中每个元组代表一个点,我们需要返回最大共线点数。

我已经找到了一个 O(N^2) 的解决方案,方法是根据存储在哈希表中的相同斜率将每个点与其他可能的点进行比较。

我相信通过将每个点视为一个向量已经找到了一个 O(N) 的解决方案。

如果我计算每个向量的范数,得到对应的归一化向量,那么如果两个归一化向量相同,则表示它们对应的头指向共线点。这是正确的吗?

如果是这样,我可以构建一个哈希表,遍历每个点一次,存储归一化向量,每当我找到一个重复的向量时,这意味着我有另一个共线点指向相关点。

谢谢!

马可

【问题讨论】:

  • 由于浮点数学的精度有限,如何定义“相同”?
  • 视情况而定。在您的解决方案中,如果两个向量与坐标系的原点一起形成一条线,则它们是相同的。此外,归一化通常不会改变向量的方向,而对于您的问题,pi 的旋转也应该被视为相等。如果这两点都适用,那么您的解决方案很好
  • 这能回答你的问题吗? Maximum Collinear points in a plane
  • 如果形成的线没有经过原点,那么归一化方法不起作用。
  • 不,你不能孤立地处理点,你需要考虑的是点对的方向。

标签: algorithm data-structures hash computational-geometry


【解决方案1】:

这是不正确的。如果点在一条不经过原点的直线上共线,那么从原点指向这些点的向量范数可以到处都是。

【讨论】: