查找两个列表的排序以匹配总和
这是一个关于编码的谜语。我不确定这是否是一个好问题,但我很难找到解决方案。我有两个元组A = (9,2,58,58)和B = (57,1,57,8).
有没有办法对列表 B 进行排序,以便 BA 给出所有相同的结果?
答案是Bs = (8,1,57,57)有B-A = (-1,-1,-1,-1)
,但我怎么能找到这种排序算法?
回答
您可以按照以下方式处理此问题:
A = (9,2,58,58)
B = (57,1,57,8)
diff = (sum(B) - sum(A)) // len(A)
B_sorted = tuple(x + diff for x in A)
# (8, 1, 57, 57)
# assert sorted(B) == sorted(B_sorted)
# if the assertion fails, no such ordering exists
逻辑:如果你可以从A以B通过增加相同数量的diff每一个元素,它必须认为
sum(A) + len(A) * diff = sum(B)
然后使用此公式计算diff并应用加法。