给定一个球员评分列表,我需要尽可能公平地将球员(即评分)分成两组。目标是最小化团队累积评分之间的差异。我如何将球员分成几队没有限制(一支球队可以有 2 名球员,另一支球队可以有 10 名球员)。
例如:[5, 6, 2, 10, 2, 3, 4]应该返回([6, 5, 3, 2], [10, 4, 2])
我想知道解决这个问题的算法。请注意,我正在参加在线编程入门课程,因此将不胜感激简单的算法。
我正在使用以下代码,但由于某种原因,在线代码检查器说它不正确。
def partition(ratings):
set1 = []
set2 =[]
sum_1 = 0
sum_2 = 0
for n in sorted(ratings, reverse=True):
if sum_1 < sum_2:
set1.append(n)
sum_1 = sum_1 + n
else:
set2.append(n)
sum_2 = sum_2 + n
return(set1, set2)
Run Code Online (Sandbox Code Playgroud)
更新:我联系了导师,被告知我应该在函数中定义另一个“帮助”函数来检查所有不同的组合,然后我需要检查最小差异。