【问题标题】:Finding count of points for which both [x,y] are bigger than given point?查找 [x,y] 都大于给定点的点数?
【发布时间】:2017-09-04 04:10:25
【问题描述】:

给定一组 x,y 坐标(最多 10^9 个不同的点),并给定一个点 P = {x_p, y_p},在该集合中找到满足 x_i > x_py_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 > 1y > 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_ny_p > y_n 或反之亦然(取决于你如何排序)
  • 也许你应该给我们一个输入和输出的例子,让我们更清楚。

标签: arrays search data-structures


【解决方案1】:

为什么你认为简单的解决方案是 O(n^2) ?

只需遍历检查条件的点并增加一个 O(n) 的计数器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2013-12-03
    相关资源
    最近更新 更多