计算数组中特定范围元素总和的算法

时间:2017-09-07 07:14:01

标签: algorithm data-structures

我们有一个数组arr[0 . . . n-1]。我们应该能够找到从索引l到r的元素总和0 <= l <= r <= n-1

一个简单的解决方案是运行从l到r的循环并计算给定范围内的元素总和。该操作需要O(n)次。

另一种解决方案是创建另一个数组,并在此数组中的第i个索引处存储从start到i的和。现在可以在O(1)时间内计算给定范围的总和。

在第一个示例中,复杂性为O(n),因为它遍历数组的每个元素。但在第二个解决方案中,复杂性是O(1)。 请帮我理解这一点。

2 个答案:

答案 0 :(得分:0)

第二种解决方案包括一个复杂度O(n)的预处理步骤,以及显然sum[r] - sum[l-1]的{​​{1}}计算。总体复杂性为O(1)

这些解决方案之间的区别在于查询部分的时间复杂性。第一个解决方案有O(n)个查询,第二个是O(n)。如果我们有O(1)范围查询,那么第一种方法的复杂性将是m,而第二种方法的复杂性会更好。{/ p}更好。

答案 1 :(得分:0)

提到的复杂性是关于回答查询。在第一种情况下,您将l迭代到r,使其O(n),但在第二种情况下,sum[l] = arr[0] + ... + arr[l]sum[r] = arr[0]+ ... +arr[r]。要获得[l,r]范围内元素的总和,您必须执行sum[r]-sum[l-1] {l> 0} ,这只是一个操作。这就是为什么第二种情况的复杂性是O(1)

相关问题