有使用循环添加整数的标准方法,
/Users/<Username>/AppData/Local/Android/sdk/tools
上述逻辑时间复杂度为O(n),但如果n非常大(考虑10 ^ 10),那么计算需要更多时间。所以,请给我任何能够以低于O(n)时间复杂度工作的解决方案。
答案 0 :(得分:0)
考虑在块中循环
sum =0;
for(int i =0;i<arraySize; i = i + 5){
sum+=array[i];
sum+=array[i+1];
sum+=array[i+2];
sum+=array[i+3];
sum+=array[i+4];
}
当然你需要正确检查是否有界限。
在这个简单的示例中,我怀疑是否有任何收获
答案 1 :(得分:-2)
您可以通过始终记录数组总和来实现此目的。从空数组和空变量sum
开始。然后,每当您向数组添加项目时,相应地更新总和。
有两个主要操作影响数字数组的总和:向数组添加新数字,并从数组中删除数字。添加时,总和将成为添加到新数字的先前总和。因此,只需将新数字的值添加到sum
变量即可。删除项目时,总和将减去要删除的数量。因此,从sum
中减去要删除的项的值。可以执行更多操作,但它们都基于这两种操作。
因此,您可以实施insert
,pop
和replace
方法或函数来为您抽象这项工作。
因此,无论何时添加或删除项目,都需要通过一些O(1)算法来重新计算总和。但是您可以在O(1)时间内访问总和,因为总和在变量中。这当然要求您不要在不使用函数/方法的情况下直接更改数组的值。
不幸的是,我不太清楚C和Java是否足以提供实现。我希望我的数据结构草图有助于实现这一目标。
编辑:这是一个展示概念的Python实现。希望你能从中获得核心。
class ArraySum:
''' contains an array of numbers and a representation of the
sum, which is updated in each insert/pop/replace operation '''
def __init__(self):
self._data = []
self.sum = 0
def append(self, elem):
''' add an item to the array'''
self.sum += elem # update sum
self._data.append(elem) # add to array
def pop(self, i=None):
''' remove the item at index i of the array'''
if i is None:
i = len(self._data)
self.sum -= self._data[i]
return self._data.pop(i)
def replace(self, i, elem):
''' replace the item at i by a new element'''
self.sum -= self._data[i]
self.sum += elem
self._data[i] = elem
if __name__ == '__main__':
a = ArraySum()
a.append(4)
print(a.sum) # sum = 0 + 4
a.append(8)
print(a.sum) # sum = sum + 8
a.pop(1)
print(a.sum) # sum = sum - 8
a.replace(0, 1)
print(a.sum) # sum = sum - 4 + 1