【发布时间】:2016-09-15 14:03:40
【问题描述】:
找到索引可被 i 整除且复杂度最低的数组所有元素的总和的最佳方法是什么。
我写了下面的代码。但那是蛮力。我能做得更好吗
#include<stdio.h>
int main() {
int n, q;
int mod = 1000000000 + 7;
scanf("%d", &n);
int arr[n+1];
int i;
for (i = 1; i <= n ; ++i) {
scanf("%d", &arr[i]);
}
int p;
scanf("%d", &p);
int sum = 0;
int j;
for(j = p; j <= n; j = j+p) {
sum = (sum + arr[j]) % mod;
}
printf("%d\n",sum);
return 0;
}
【问题讨论】:
-
你必须检查数组的所有元素,所以你不能比 O(n) 更好。
-
好吧,您已经发布了 C 代码……但如果您认为它不适用于特定语言,您可以将其标记为“与语言无关”。
-
在使用普通 int 时除以 10 亿?这段代码有问题,你确定没有整数溢出吗?
-
@AndyTurner - 你对复杂度为 O(n) 是正确的,但对数组的“check all 元素是错误的”。请参阅 OP 的代码,其中他仅检查索引为
p倍数的元素。 -
发布的目标不包含
% mod的原因。发布为什么代码需要做% mod,否则只需删除%以提高性能。
标签: c arrays language-agnostic