【发布时间】:2017-01-18 22:34:13
【问题描述】:
我最近遇到了一个类似这样的问题
有 N 个不相交的(这样它们不接触或相交的)圆,由它们的中心和半径给出,即
center = (x_i, y_i), radius = r_i。然后我们有 Q 查询,其中给出了一个点(x, y)。对于每个查询,我们需要找出包含给定点的圆的索引i(如果没有圆,则为-1)。
约束大致为1 <= N <= 10^5和1 <= Q <= 10^5。所以可能需要O(Q * log(N))。
除了直截了当的O(Q * N) 解决方案之外,我能想到的唯一更好的方法是将圆圈的最左边和最右边的点作为间隔保留在数组中,然后进行二分搜索以找出包含 x 的间隔- 点的坐标,但多个区间可能重叠,并且多个圆可能包含该点。所以我不确定这是否会奏效。
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: algorithm geometry binary-search