添加数组中除元素索引复杂度为O(n)的所有元素

时间:2019-05-05 18:49:48

标签: java algorithm

这就是我在某些编码测试中遇到的问题。

问题语句就像我们必须添加数组中除索引元素外的所有元素。此处不能使用减法运算符,并且复杂度应为O(n)。

喜欢 arr={3,7,8,4,9} then result array will be... sum={28,24,23,27,22}

我已经考虑了很多。但仍然缺少一些东西。一些提示或伪代码将是有意义的。

结论: 如果对此没有其他合理的答案,那么以任何方式实现减法都是可能的解决方案。我已经使用-1 * arr [i]得出结论,否则复杂度将为O(n2)。

编辑:以上结论不正确。

2 个答案:

答案 0 :(得分:2)

由于O(2n)= O(n)的复杂度,您可以使用一个循环来计算整个和。 然后在病房之后进行第二次循环,并将索引处的值设置为 arr [i] = totalSum-arr [i]

编辑:糟糕,忘记了您不能使用减法。 但是,相减等于两个补码LOL的加法。

编辑:这是python2中的解决方案

arr = [3,7,8,4,9]
sum = 0
for elem in arr:
    sum += elem

for i in xrange(len(arr)):
    elem = arr[i]
    elem = ~elem + 1
    arr[i] = sum + elem

print arr

输出

./bla.py 
[28, 24, 23, 27, 22]

答案 1 :(得分:2)

一种简单的 O n )方法,仅使用加法(不使用.card--blue { position: relative; width: 70%; height: 100%; .header{ position: absolute; z-index: 1; } &::after { display: block; content: ""; width: 100%; height: 100%; position: absolute; top: 0; left: 0; background: $color-3; -webkit-clip-path: polygon(0 0, 46% 0, 81% 100%, 0% 100%); clip-path: polygon(0 0, 46% 0, 81% 100%, 0% 100%); } } -1*elem之类的“秘籍”来模拟减法)要做两遍:

  • 创建结果数组~elem + 1
  • 在从索引0到索引 n -1的“正向”传递中,将sum的每个元素设置为{{1 }}:

    sum
  • 在从索引 n -1到索引0的“反向”传递中,将{{1}中所有“后”元素的总和增加arr的每个元素}}:

    int sumOfAllPrevious = 0;
    for (int i = 0; i < n; ++i) {
      sum[i] = sumOfAllPrevious;
      sumOfAllPrevious += arr[i];
    }