一组数分成两组,差的绝对值最小。
这个问题是前段时间面试完美的时候被问到的。 当时没答出来,后来一直在想这个问题。 在游戏中,这个问题可以用在随机战场分组上面。 根据每个角色的装备,等级,职业等等属性,计算每个角色的“战斗力”, 并找出实力最近的两组。
今天吃饭的时候无意中又想起这个问题,并试想了一下问题的答案:
首先,将每个玩家的战斗力从大到小排序,记为Pi (i = [1,n]), 然后将P1放到A组。 此时A组和B组的差距是P1。
为了弥补两组的差距,将剩下的P2--Pm个玩家放到B组,直到B组的总和大于或等于A组,如此循环往复,直到某一组人数满,将剩余的人添加到人数不满的一组,就能得到战斗力总和相差最小的两组人。