【发布时间】:2021-05-30 00:01:28
【问题描述】:
我遇到了一个问题,我需要找到一个特定的配对和,其中索引中的第一个元素具有索引 > i。
例子:
[1, 2, 3, 4, 6](索引0 到4)
target_sum = 9
现在,我需要从这个数组中找到索引中第一个元素的索引 > i 的成对总和。
现在,显而易见的解决方案是:
- 计算成对和数组。
[1+2, 1+3, 1+4, 1+6, 2+3, 2+4, 2+6, 3+4, 3+6, 4+6][ O(n^2) ]i> - 循环通过索引
i+1到n以找到target_sum。 [ O(n^2) ] (n为原始数组的长度)
现在,主要问题是2。即使我不能改进(1),我也需要改进(2),因为这会被很多人质疑。
我想到的一种方法:
- 从成对和数组中创建一个索引数组,值对。 O(n^2) [n为原始长度]
- 先按值排序数组,然后按索引。 O(n^2 * logn)
- 对于每个查询,运行二进制搜索以查找值所在的区间。 O(logn)
- 在该时间间隔内再次运行二进制搜索以找到索引 >
i。
有什么优雅更好的方法吗?
【问题讨论】:
-
尝试使用hashmap/字典来解决这个问题。
-
@DanielHao 你能解释一下吗? (npi)
-
我想你已经得到了下面的答案——看看最新的帖子?
标签: algorithm data-structures pairwise range-query