给出一个数字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]
答案 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