解法
首先要排序,然后容易分析得出对于任何,宽度为的子序列数量为。
会出现在下标为0,1,2,…,i-1的二元组的右边,即需要乘以,,,…,;
还会出现在下标为i+1,i+2,…,N-1的二元组的左边,即需要乘以,,,…,,所以加在一起是:
所以排序之后再扫描一遍就行了
class Solution(object):
def sumSubseqWidths(self, A):
"""
:type A: List[int]
:rtype: int
"""
MOD = 10**9+7
A.sort()
ans = 0
n = len(A)
pow2 = [1]
for i in xrange(1,n):
pow2.append((pow2[-1]<<1)%MOD)
for i in xrange(n):
j = n-1-i
if j<=i:break
ans += (A[j]-A[i])*((pow2[j]+MOD-pow2[i])%MOD)
ans = ans%MOD
return ans