统计一个整数的所有因子的个数_「leetcode891」给定一个整数数组 A,考虑 A 的所有非空子序列...

给定一个整数数组 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

分析:

76772d01dd384f2e70b81104cfe23bd6.png

题解思路

/**

* @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;

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值