假设我们有一个称为nums的数字列表,数字序列的宽度是该序列中最大和最小数字之间的差。我们必须找到所有num子序列的宽度之和。如果答案很大,则将结果修改10 ^ 9 + 7。
因此,如果输入像nums = [7,4,9],那么输出将是15,因为我们有以下子序列:[7],[4],[9],[7、4],[ 7,9],[4、9],[7、4、9],因此宽度为0、0、0、3、2、5、5,因此得到15。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, nums): m = 10**9 + 7 nums.sort() ans = 0 power = [1] * (len(nums) + 1) for i in range(1, len(nums) + 1): power[i] = power[i - 1] * 2 % m for i in range(0, len(nums)): positive = (power[i] - 1) * nums[i] negative = (power[len(nums) - i - 1] - 1) * nums[i] ans = (ans + positive - negative) % m return ans ob = Solution() nums = [7, 4, 9] print(ob.solve(nums))
[7, 4, 9]输出结果
15