首页 > 其他 > 详细

计算n个数字两两相乘的和

时间:2020-04-19 20:17:24      阅读:101      评论:0      收藏:0      [点我收藏+]

problem

\(已知给出一个长为n的序列 a,a中的每个数值为a_i,求所有任意两两匹配相乘的和(不与自己相乘)\)

solution

\(1)简单的for循环思想来进行两两匹配\) \(O(n^2)\)

for(int i=1;i<n;i++){
	for(int j=i+1;j<=n;j++){
        res += a[i]*a[j];
    }
}

\(2)通过前缀和来求解\) \(O(n)\)

例如:
\(a[1]*a[2]+...+a[1]*a[n] = a[1]*(a[2]+..+a[n]);\)
\(a[2]*a[3]+...+a[2]*a[n] = a[2]*(a[3]+..+a[n]); //所以式子也就出来了\)

\(\sum_{i=1}^n a[i]*(sum-a[i]); sum为\sum_{i=1}^n a[i]\)

for(int i=1;i<n;i++){
    res += a[i]*(sum-a[i]);
}

计算n个数字两两相乘的和

原文:https://www.cnblogs.com/Tianwell/p/12732824.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!