程序以查找Python中数字列表的所有子序列的宽度之和

假设我们有一个称为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

猜你喜欢