【发布时间】:2019-01-21 22:03:44
【问题描述】:
我被要求解决以下问题:
假设您有 N 个不同的点,同时具有正 x 坐标和正 y 坐标。对于每个坐标,您将形成一个直角三角形,其两侧连接坐标和相对于 x 轴 45 度的 x 轴。因此,在两边的交点处形成一个直角,并且三角形的斜边在 x 轴上。创建这些三角形后,从给定的 N 个点中找出没有与这些点重叠的点的数量。
例如,假设 N = 3,我们得到点:(4, 6), (7, 2), (2, 5)
点 (4,6) 的三角形的附加顶点:(-2,6), (10,6)
点 (7,2) 的三角形的附加顶点:(5,2), (9,2)
点 (2,5) 的三角形的附加顶点:(-3,5), (7,5)
在本例中,由坐标 (4,6) 形成的三角形将 与坐标 (7,2) 重叠,因此正确的输出为 2 因为只有点 (4,6) 和 (2,5) 不与任何创建的点重叠 三角形。
到目前为止,我观察到,为了检查一个点的三角形是否与 N 个点中的一个相交,你取 y 值的差并检查它是否大于或等于的绝对值差x 值,因为三角形边的斜率始终为 1。使用此属性,我的解决方案使用二次算法,将每个点与集合中的每个其他点进行比较。但是我希望在线性或线性时间解决这个问题,所以我需要帮助编写更有效的算法。
注意:x 和 y 值的大小非常大,所以我不能使用基于坐标大小进行迭代的解决方案。
【问题讨论】:
标签: algorithm performance geometry