【发布时间】:2019-07-31 20:01:44
【问题描述】:
假设我们有一个很大的整数数组 A。我们想要回答许多查询,例如:
- 查找索引 0 到 100 之间的最小值
- 找到索引 4 和 90 之间的最小值
- ...
示例:A = {6, 1, 7, 5, 3}
- 索引 0 和 1 之间的最小值为 1
- 索引 2 和 3 之间的最小值为 5
- 索引 0 和 4 之间的最小值为 1
遍历每个查询的元素并找到最小值的明显方法在性能方面是不够的。我不知何故需要一次性存储所需的信息,然后在恒定时间内回答查询。所以算法不应该是二次的。需要比 O(N * M) 更好的东西。 (N:数组大小,M:查询次数)
我试过了,但找不到怎么做。它一定是关于查找和存储一些总和并以某种方式使用它们的东西。有任何想法吗?感谢阅读。
【问题讨论】:
-
初始pass可以是O(n^2)吗?
-
@Sweeper 我猜你想创建一个最小值矩阵。但初始通过也应该比 O(n^2) 更好。现在我正在尝试一种 O(N logN) 的方法,如果可行,我会在这里写。
-
其实半个矩阵就够了,但还是O(n^2)。
-
是的,你是对的。
标签: java algorithm data-structures array-algorithms