【发布时间】:2010-03-18 20:23:02
【问题描述】:
给定一个数组。我们如何在常数时间内找到索引区间(i, j) 中的元素总和。您可以使用额外的空间。
示例:
答:3 2 4 7 1 -2 8 0 -4 2 1 5 6 -1
长度 = 14
int getsum(int* arr, int i, int j, int len);
// suppose int array "arr" is initialized here
int sum = getsum(arr, 2, 5, 14);
总和应该是 10 在恒定时间内。
【问题讨论】:
-
现在在
O(log N)中执行此操作,如果您还可以在查询之间更改元素的值:)。 -
int getsum(int* arr, int i, int j, int len) { return 10; } ;)
-
@Matt - 您的恒定时间版本非常慢。它应该是
#define getsum(arr, i, j, len) 10以获得最大效率。 -
@:IVlad 只有在每次元素值更改时给我
O(log N)时间!