公式的前提是,a[ i ]<=a[ j ]&&i < j;
这样取去除对值之后,每次求和时间复杂度降低为O(n)
但在实际写程序的时候,求出前缀和是一个麻烦的过程,而且会浪费大量空间,因此排序后我们就可以从前往后扫一遍,第i个数被加了 i - 1 次被减了(n - i)次(注意这里 i 从1开始取);
代码如下:
for(ll i=1;i<=n;i++)
{
ans+=a[i]*(i-1);
ans-=a[i]*(n-i);
}
公式的前提是,a[ i ]<=a[ j ]&&i < j;
这样取去除对值之后,每次求和时间复杂度降低为O(n)
但在实际写程序的时候,求出前缀和是一个麻烦的过程,而且会浪费大量空间,因此排序后我们就可以从前往后扫一遍,第i个数被加了 i - 1 次被减了(n - i)次(注意这里 i 从1开始取);
代码如下:
for(ll i=1;i<=n;i++)
{
ans+=a[i]*(i-1);
ans-=a[i]*(n-i);
}