【发布时间】:2017-09-04 04:10:25
【问题描述】:
给定一组 x,y 坐标(最多 10^9 个不同的点),并给定一个点 P = {x_p, y_p},在该集合中找到满足 x_i > x_p 和 y_i > y_p 的点数,其中i 是集合中的 i'th 点。我想对集合中的所有点执行此操作(换句话说,p 属于 [1, n]。其中n 是集合的大小。
对于这种大小的集合,简单的 O(n^2) 方法效率太低。这类问题有更好的算法或数据结构吗?
示例:
S = [(1,10), (7,2), (2,5), (9,4), (3,2)]
输出
0 1 0 0 1.
解释:对于(1,10),不存在具有x > 1 和y > 10 的元素,因此对于(1,10),输出为0。但是,对于(7,2),有一个元素((9,4))满足我们的条件,因此对于(7,2),输出是1。
【问题讨论】:
-
要明确一点,所有点
{x_p, y_p}都属于与{x_i, y_i}相同的“集合”,而不仅仅是任意的测试输入? -
我不知道我是否清楚地理解了你的问题。但是你不能假设满足你条件的点数可以通过:
(x_n - x_p) * (y_n - y_p)来计算吗? -
@meowgoesthedog 你是对的!
{x_p, y_p}不是任意输入。它们都属于同一个集合。 -
@GeorgeBou 我认为您的意思是我们以某种方式对集合进行排序,然后计算
(x_n - x_p) * (y_n - y_p),其中n是数组中的最后一个元素。但这不起作用,因为最后一个元素可能有x_p < x_n但y_p > y_n或反之亦然(取决于你如何排序) -
也许你应该给我们一个输入和输出的例子,让我们更清楚。
标签: arrays search data-structures