如何找到距给定点的距离小于或等于整数 n 的所有数字

how to find all numbers that there distance from given point are less or equall to integer n

给定一组点 D 和一些数字 K,我想找到 D 中的所有数字,使得 K 与任何找到的数字之间的距离小于或等于整数 N?

示例: 假设我们有 D={5,9,0,6,7} 和 K=8 和 N=1 那么结果应该是 {9,7}

我正在考虑使用 k-d 树或 VP 树,但据我所知(如果我错了请纠正我)找到最近的邻居并且不关心我示例中的 N。

总结所有评论:

解决这个问题,因为蛮力将花费 O(n) 时间迭代 D 中的每个元素,并检查它与 k 的距离是否小于 n.

你有大数据集但是很多查询最好在 D 上做预处理(使用 O(nlogn) 你可以在 O(logn) 中得到答案 -> 通过排序 D作为预处理(在 O(nlogn) 中作为数组的酒窝排序。

现在,在给定的查询中搜索 k - 请注意,如果数字缺失,二分搜索将停止,但 do 会在最接近的值处停止。从该索引开始传播到 D 的两侧,并且每次检查是否仍在 n 范围内。注意 allow 中的传播,因为它包含 O(|output|).

在您的示例中:已排序 D 产量:[0,5,6,7,9]。尝试查找 k=8 会给出 false 但索引为 3 或 4(取决于实现)。假设是 return 索引 3。对于 3 直到最后一个索引检查是否 arr[i] - k < n 如果是这样打印 - 如果更大 stop。对于另一边检查 k - arr[i] < n - 如果是这样打印,如果更大 stop -> 这会给你 7,9

希望对您有所帮助!