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

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

假设我们有一个称为nums的数字列表,数字序列的宽度是序列中最大数和最小数之间的差。我们必须找到nums的所有子序列的宽度总和。如果答案非常大,则将结果对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。

要解决此问题,我们将遵循以下步骤:

  • m:= 10 ^ 9 + 7

  • 排序nums列表

  • ans:= 0

  • power :大小与(nums + 1)相同的列表,并用1填充

  • 对于i在范围1到nums的大小+1内,执行以下操作 –

    • power[i]:= power[i-1] * 2 mod m

    • 对于i在0到nums的大小的范围内,执行以下操作 –

      • positive:=(power [i] -1)* nums [i]

      • negative:=(power [nums的大小-i-1] -1)* nums [i]

      • ans:=(ans +正 -负)mod m

  • 返回ans

更多Python相关文章,请阅读:Python 教程

示例

让我们查看以下实现以更好的了解 –

class Solution:
   def solve (self,nums):
      m = 10 ** 9 + 7
      nums. sort()
      ans = 0
      power = [1] *(len(nums)+1)
      for i在范围1到len(nums)+1内:
          power [i] = power [i-1] * 2%m
      for i在范围0到len(nums)的范围内:
          positive =(power [i] -1)* nums [i]
          negative =(power [len(nums)-i-1] -1)* nums [i]
          ans =(ans + positive-负)%m
      return ans
ob = Solution()
nums = [7, 4, 9]
print(ob.solv (nums))

输入

[7,4,9] 

输出

15 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程