【问题标题】:Minimum Sum, Revisited. (Not Minimum Subarray Sum)最小总和,重新审视。 (不是最小子数组和)
【发布时间】:2019-01-19 10:18:02
【问题描述】:

给定一个数字 n,一个数组 arr 我想提取最小数量的整数来达到 n,并从 arr 中删除我使用的数字。最好用一个例子来解释。给定 n = 13 和 arr = [8,0,2,2,3,1,1,3,1] 我必须从 arr 中删除总和为 13 的最小整数。

我的策略是按降序对 arr 进行排序,因此 arr 将是 [8,3,3,2,2,1,1,1,0],然后我开始从第一个数字迭代到最后一个数字并中断当我到达 n 时,在这种情况下为 13。鉴于我们的示例,我将以 8,3,3 结束,因为我已经是 13 了。但问题来了,3 后面就是 2,如果我选择 2 而不是 3(8 + 3 + 2 = 13),我会节省更多。我说节省更多,因为这个问题是另一个巨大问题的一部分,并且要成功实施它,我需要尽可能少。如果在两个的地方,我说 5,我的排序方法会很好。而且,我想删除我用来求和的数字并将它们保存在另一个数组中,称之为 arr1。所以对于这个例子,结果应该是 arr = [3,2,1,1,1,0] 和 arr1 = [8,3,2]。任何人都可以帮助我吗?我的 Python 代码看起来像这样(假设列表已经排序):

n = 13

arr1 = []

arr = [8,3,3,2,2,1,1,1,0]

for i in xrange(len(arr)):

     if sum(arr1) < n:

          arr1.append(arr[0])

          del arr[0]

     else:

          break

print arr,arr1

这将打印 [2,2,1,1,1,0] [8,3,3]。但我希望它打印 [8,3,2] [3,2,1,1,1]

【问题讨论】:

  • 数字的最大值?

标签: python arrays sorting


【解决方案1】:

这应该可以工作

n = 13

arr1 = []

arr = [8,3,3,2,2,1,1,1,0]

for i in arr:
     if sum(arr1)+i <= n:
          arr1.append(i)
          arr.remove(i)
     if sum(arr1) == n:
          break
print arr,arr1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 2020-01-08
    • 2018-12-05
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2022-10-04
    • 2017-04-16
    相关资源
    最近更新 更多