【问题标题】:Efficient query for finding an element in a range在范围内查找元素的高效查询
【发布时间】:2021-05-30 00:01:28
【问题描述】:

我遇到了一个问题,我需要找到一个特定的配对和,其中索引中的第一个元素具有索引 > i

例子:

[1, 2, 3, 4, 6](索引04

target_sum = 9

现在,我需要从这个数组中找到索引中第一个元素的索引 > i 的成对总和。

现在,显而易见的解决方案是:

  1. 计算成对和数组。 [1+2, 1+3, 1+4, 1+6, 2+3, 2+4, 2+6, 3+4, 3+6, 4+6] [ O(n^2) ]​​i>
  2. 循环通过索引i+1n 以找到target_sum。 [ O(n^2) ] (n为原始数组的长度)

现在,主要问题是2。即使我不能改进(1),我也需要改进(2),因为这会被很多人质疑。

我想到的一种方法:

  1. 从成对和数组中创建一个索引数组,值对。 O(n^2) [n为原始长度]
  2. 先按值排序数组,然后按索引。 O(n^2 * logn)
  3. 对于每个查询,运行二进制搜索以查找值所在的区间。 O(logn)
  4. 在该时间间隔内再次运行二进制搜索以找到索引 > i

有什么优雅更好的方法吗?

【问题讨论】:

  • 尝试使用hashmap/字典来解决这个问题。
  • @DanielHao 你能解释一下吗? (npi)
  • 我想你已经得到了下面的答案——看看最新的帖子?

标签: algorithm data-structures pairwise range-query


【解决方案1】:

O(n^2) 中创建地图sum -> highest first element index。然后通过在地图中查找目标总和并确定highest first element index 是否高于i 来回答O(1) 中的每个查询。

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多