【问题标题】:How to find Sum of differences of maximum and minimum of all possible subset of an array如何找到数组的所有可能子集的最大值和最小值的差之和
【发布时间】:2015-05-09 05:23:27
【问题描述】:

如何查找给定数组的所有可能子集的最大值-最小值之和

例如

给定数组是 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 ]] 答案=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]] 答案= 72

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    首先,对数组进行排序,然后第 i 个元素将在所有不包括 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]

    sorted=1,2,3
    1* (2^0 - 2^2) + 2*(2^1 - 2^1) + 3*(2^2 - 2^0) =
    1*(-3) + 2*0 + 3*(3) = -3 + 0 + 9 = 6
    

    【讨论】:

    • 请多解释一点..解释很难得到。
    • 当数组不连续例如 1 3 5 6 7 11 时,此公式是否有效
    • 那么重复值 1 3 3 4 5 6 7 7
    • 实际上问题是给定一个由 N 个非负整数组成的集合 S(某些整数可能在集合中出现多次),找出 SETDIFF(S) 的值。 setdif= max(s)-min(s) 之和 其中 max(s) 表示集合 s 中的最大值,而 min(s) 表示集合 s 中的最小值。由于 SETDIFF(S) 的值可能非常大,以 (109 + 7) 为模打印。
    • 看...这个网站给你想法但不是代码..如果想法有帮助你可以接受答案..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    相关资源
    最近更新 更多