【问题标题】:add elements of array thats sum equals the largest element添加总和等于最大元素的数组元素
【发布时间】:2015-02-20 20:37:55
【问题描述】:

添加数组元素的方法是什么,总和等于数组中的最大元素?

这个数组的例子 [4, 6, 23, 10, 1, 3] 我首先对数组进行排序,得到 [1, 3, 4, 6, 10, 23] 然后我弹出最后一位或最后一位element max = 23. 我只剩下 [1, 3, 4, 6, 10] 并且需要一种方法来找到一种方法来找到加起来为 23 的元素,即 3 + 4 + 6 + 10 = 23。元素不必是后续元素,它们可以位于数组的随机点,但它们必须加起来为最大值。

我可以找到从 2 个元素到 n-1 个元素的排序数组的排列,并将它们相加并将它们与最大值进行比较,但这似乎效率低下。请帮忙

【问题讨论】:

    标签: ruby arrays algorithm


    【解决方案1】:

    这正是subset sum problem,也就是NP-Complete,但如果你的数字是相对较小的整数,使用Dynamic Programming 有一个有效的伪多项式解决方案:

    D(i,0) = TRUE
    D(0,x) = FALSE   x>0
    D(i,x) = D(i-1,x) OR D(i-1,x-arr[i])
    

    如果有解决方案,您需要退回到由 DP 解决方案创建的矩阵,并“记录”您在此过程中所做的每个选择,以获得用于求和的元素。这个线程处理如何在一个非常相似的问题(称为背包问题)中找到实际元素,解决方法类似:How to find which elements are in the bag, using Knapsack Algorithm [and not only the bag's value]?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 2017-02-02
      • 1970-01-01
      • 2022-10-12
      • 1970-01-01
      • 2013-01-12
      • 2022-12-31
      • 2022-10-21
      相关资源
      最近更新 更多