给定一个整数数组 A ,考虑 A 的所有非空子序列。
对于任意序列 S ,设 S 的宽度是 S 的最大元素和最小元素的差。
返回 A 的所有子序列的宽度之和。
由于答案可能非常大,请返回答案模 10^9+7。
示例:
输入:[2,1,3]
输出:6
解释:
子序列为 [1],[2],[3],[2,1],[2,3],[1,3],[2,1,3] 。
相应的宽度是 0,0,0,1,1,2,2 。
这些宽度之和是 6 。
提示:
1 <= A.length <= 20000
1 <= A[i] <= 20000
分析:
/**
* @param {number[]} A
* @return {number}
*/
var sumSubseqWidths = function(A) {
A.sort((a,b)=>{return a-b});
let len = A.length;
let pow2 = [1],mod = 1000000007,res=0;
for(let i = 1;i
pow2.push(pow2[i-1]*2 % mod);
}
A.forEach((ele,index)=> {
res = (res + (pow2[index] -1) * ele % mod) % mod;
res = (res -(pow2[len-1-index] -1) * ele % mod) % mod;
});
return res % mod;
};