在Python中找到给定数组的所有子集可能产生的最大差异之和

假设我们有一个n个值的数组A(元素可能不相同)。我们必须找到给定数组所有子集可能产生的最大差异之和。现在考虑max(s)表示任何子集中的最大值,min(s)表示集合中的最小值。我们必须找到所有可能子集的max(s)-min(s)之和。

因此,如果输入类似于A = [1、3、4],则输出将为9。

为了解决这个问题,我们将遵循以下步骤-

  • n:= A的大小

  • 排序列表A

  • sum_min:= 0,sum_max:= 0

  • 对于0到n范围内的i,执行

    • sum_max:= 2 * sum_max + A [n-1-i]

    • sum_max:= sum_max mod N

    • sum_min:= 2 * sum_min + A [i]

    • sum_min:= sum_min mod N

  • return(sum_max-sum_min + N)mod N

示例

让我们看下面的实现以更好地理解-

N = 1000000007
def get_max_min_diff(A):
   n = len(A)
   A.sort()
   sum_min = 0
   sum_max = 0
   for i in range(0,n):
      sum_max = 2 * sum_max + A[n-1-i]
      sum_max %= N
      sum_min = 2 * sum_min + A[i]
      sum_min %= N
   return (sum_max - sum_min + N) % N
A = [1, 3, 4]
print(get_max_min_diff(A))

输入值

[1, 3, 4]

输出结果

9
猜你喜欢