uj5u.com熱心網友回復:
這不是O(N)就可以了嗎?int main() {
int i, n, sum=0, flg=1;
scanf("%d", &n);
for (i=1; i<=n; i++) {
sum += flg*i;
flg *= -1;
}
printf("%d\n", sum);
return 0;
}
uj5u.com熱心網友回復:
很明顯 每兩項為-1,到N為止就是-n/2 時間復雜度O(1)uj5u.com熱心網友回復:
當然,如果你直接用公式,O(1)就可以int main() {
int i, n, sum=0, flg=1;
scanf("%d", &n);
sum = (-1)*(n/2) + (n%2==0?0:n); //通過技巧,每兩項的和是-1,判斷n是不是偶數,如果是偶數則-1*n/2,否則再+n
printf("%d\n", sum);
return 0;
}
uj5u.com熱心網友回復:
O(1) 直接匯出公式1-2 =-1;
3-4=-1;
。。。。
如果N是偶數 等于-1*N/2
奇數N+(N/2)*(-1)
uj5u.com熱心網友回復:
直接通項公式 求結果時間復雜度O(1)
完事
uj5u.com熱心網友回復:
看要回圈的次數是O(n);但是找到規律,用公式就是O (1);演算法的優勢~
uj5u.com熱心網友回復:
休息奇數偶數是不一樣的
uj5u.com熱心網友回復:
沒注意看
那就再判斷最后一個是奇數或者偶數 偶數的話就如我之前說的
奇數的話加一個N
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58514.html
標籤:C語言
