题目描述:
一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。
给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对 109 + 7 取余 后的结果。
子序列 定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数组。例如,[3,6,2,7] 就是数组 [0,3,1,6,2,2,7] 的一个子序列。
解题思路:
代码演示:
class Solution:
def sumSubseqWidths(self, nums: List[int]) -> int:
MOD = 10 ** 9 + 7
nums.sort()
return sum((pow(2, i, MOD) - pow(2, len(nums) - 1 - i, MOD)) * x
for i, x in enumerate(nums)) % MOD