这就是我在某些编码测试中遇到的问题。
问题语句就像我们必须添加数组中除索引元素外的所有元素。此处不能使用减法运算符,并且复杂度应为O(n)。
喜欢
arr={3,7,8,4,9}
then result array will be... sum={28,24,23,27,22}
我已经考虑了很多。但仍然缺少一些东西。一些提示或伪代码将是有意义的。
结论: 如果对此没有其他合理的答案,那么以任何方式实现减法都是可能的解决方案。我已经使用-1 * arr [i]得出结论,否则复杂度将为O(n2)。
编辑:以上结论不正确。
答案 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];
}