重新审查的最低和。 (不是最小子数组总和)

时间:2018-08-12 14:03:52

标签: python arrays sorting

给出一个数字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),我会节省更多。我说节省更多,因为这个问题是另一个巨大问题的一部分,并且要成功实施它,我需要尽可能地减少。如果在2的位置,我说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]

1 个答案:

答案 0 :(得分:0)

这应该有效

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