Leetcode: 【每日一题】- 2019-09-26 - 寻找最近的点

Created on 25 Sep 2019  ·  4Comments  ·  Source: azl397985856/leetcode

给定二维平面上N个点的坐标(x, y) , 找出距离最近的两个点。

如图:
image

<Beauty of Programming> Array Daily Question stale

Most helpful comment

用45分钟 没想出来

看别人答案 第三点合并部分没看懂.依然没看懂

思路:把点集分为两半,最近点对可能全部属于左半点集,或者右半点集,或者一个属于左半点集,一个属于右半点集。所以最终结果为这三种情况的最小值。

分治法一般分为三个步骤:

1 分解:将 n 个点按照横坐标排序,并按照 1~n编号, 分成两部分:1~⌊n2⌋、⌈n2⌉~n。
2 解决:分别求出左右两部分中的最近点对距离,记为 d1 和 d2d,取 d=min(d1,d2))。

时间复杂度为 2T(n2) (这里通常采用递归的办法)

3 合并:这一步考虑的问题是,最近点对可能分别来自左半部分点集和右半部分点集,
所以如果存在这样一个最近点对距离比 d 还小,
那么返回该值,否则返回 d。

————————————————

All 4 comments

用45分钟 没想出来

看别人答案 第三点合并部分没看懂.依然没看懂

思路:把点集分为两半,最近点对可能全部属于左半点集,或者右半点集,或者一个属于左半点集,一个属于右半点集。所以最终结果为这三种情况的最小值。

分治法一般分为三个步骤:

1 分解:将 n 个点按照横坐标排序,并按照 1~n编号, 分成两部分:1~⌊n2⌋、⌈n2⌉~n。
2 解决:分别求出左右两部分中的最近点对距离,记为 d1 和 d2d,取 d=min(d1,d2))。

时间复杂度为 2T(n2) (这里通常采用递归的办法)

3 合并:这一步考虑的问题是,最近点对可能分别来自左半部分点集和右半部分点集,
所以如果存在这样一个最近点对距离比 d 还小,
那么返回该值,否则返回 d。

————————————————

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

How can I need added to it

How can I need added to it

You mean "making a pull request" ? If so, please visite Daily Problem Contribution

Was this page helpful?
0 / 5 - 0 ratings