我正在尝试寻找一种O(n)的子方法来计算一个整数数组的总和~~~(而不是遍历0-n,我在使用n/2)~~~。但我仍然是以O(n)的时间复杂度进行计算。
public static int sum(int[] s) {
int length = s.length - 1;
int half = length/2;
int sum = 0;
for(int i = 0; i <= half; i++) {
System.out.println(i + " " + s[i] + " + " + s[length - i]);
sum += s[i] + s[length - i];
}
return sum;
}
我的算法适用于偶数个整数,但是当有奇数个整数时,它会将中间索引的值计算两次:
测试:
int[] arr = {1, 2, 3, 4, 5};
System.out.println(sum(arr));
输出:
0 1 + 5
1 2 + 4
2 3 + 3
Sum: 18
我的问题是 - 怎样最好地计算奇数个数字的中间索引的总和?
O(n)
。你进行了相同数量的加法运算。你只是避免了i
的n
次自增操作,但现在你需要进行减法运算。 - IVladO(n)
等于O(n/2)
。 - PM 77-1