如何找到给定数组的所有可能子集的最大 - 最小值之和
例如
给定数组为1 所有可能的子集都是[[],[1]] 1-1 = 0
给定的数组是1 2 所有可能的子集都是[[],[1],[2],[1,2]] 1-1 + 2-2 + 2-1 = 1
给定的数组是1 2 3 所有可能的子集都是[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 1-1 + 2-2 + 2-1 + 3-3 + 3-1 + 3-2 + 3-1 = 6
给定的数组是1 2 3 4 所有可能的子集是[[],[1],[2],[1,2],[3],[1,3],[4],[2,3],[1,4],[1] ,2,3],[2,4],[1,2,4],[3,4],[1,3,4],[2,3,4],[1,2,3,4] ]] ANS = 23
给定的数组是2 3 4 5 所有可能的子集是[[],[1],[2],[1,2],[3],[1,3],[4],[2,3],[1,4],[5] ],[1,2,3],[2,4],[1,5],[1,2,4],[3,4],[2,5],[1,3,4], [1,2,5],[3,5],[2,3,4],[1,3,5],[4,5],[1,2,3,4],[2,3] ,5],[1,4,5],[1,2,3,5],[2,4,5],[1,2,4,5],[3,4,5],[1] ,3,4,5],[2,3,4,5],[1,2,3,4,5]] ans = 72
答案 0 :(得分:2)
首先,对数组进行排序,然后第i个元素在所有不包含rails generate -h
Please choose a generator below.
Rails:
assets
controller
generator
helper
integration_test
jbuilder
job
mailer
migration
model
resource
scaffold
scaffold_controller
task
第一个元素的子集中最小,并包含此元素。这些将是i-1
。同样,2^(n-i)
将是i
之后不包含任何数字的每个子集中的最高元素,并且包含i
,并且有i
个此类子集。现在迭代并为每个2^(i-1)
添加:
i
考虑您的示例:sum = sum + array[i] * (2^(i) - 2^(n-i-1))
//if array starts with index array[0]
[1,2,3]