在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
- power[i]:= power[i-1] * 2 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