在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 教程
示例
让我们查看以下实现以更好的了解 –