如何最优地将数组划分为两个子数组,以使两个子数组中的元素总和相同,否则会出错?
鉴于阵列
10, 20 , 30 , 5 , 40 , 50 , 40 , 15
Run Code Online (Sandbox Code Playgroud)
它可以分为
10, 20, 30, 5, 40
Run Code Online (Sandbox Code Playgroud)
和
50, 40, 15
Run Code Online (Sandbox Code Playgroud)
每个子阵列总计达105.
10, 20, 30, 5, 40, 50, 40, 10
Run Code Online (Sandbox Code Playgroud)
该数组不能分为2个等数和的数组.
我有两个数字列表(A和B),A中某些元素的组合应该与B中某些元素组合的总和相同.当匹配组时,匹配的元素将从其列表中删除,直到所有组合都匹配.
例如,使用两个列表:
A = [7, 8, 12, 300, 350]
B = [3, 4, 20, 150, 500]
Run Code Online (Sandbox Code Playgroud)
匹配组的总和将是:
{7: [{'A': [7], 'B': [3, 4]}],
20: [{'A': [8, 12], 'B': [20]}],
650: [{'A': [300, 350], 'B': [150, 500]}]}
Run Code Online (Sandbox Code Playgroud)
到目前为止我解决这个问题的天真方法是从每个列表中得到所有可能组合的总和(pow(2,len(mylist)) - 1),在两组所有组合之间做一组交集,然后删除元素按顺序排列,直到占用所有元素.
有谁知道一个更有效的算法来实现这一目标?扩展到每个列表的所有可能组合然后进行集合交叉可以变大.
这是天真的方式:
def getCombos(stuff):
res = []
for L in range(1, len(stuff) + 1):
for subset in itertools.combinations(stuff, L):
res.append(subset)
return res
Acombo = getCombos(A)
Bcombo = getCombos(B)
AcomboSum = [sum(tup) for tup in Acombo]
BcomboSum = [sum(tup) for tup in …
Run Code Online (Sandbox Code Playgroud) 好吧,我有这个包含playerID和玩家averageScore的树形图.我想把它分成另外两张地图,这样每支球队都有一定数量的球员,整体球员得分大致相同(偏差约为+/- 2)
private TreeMap<Integer, Double> teamScoreMap = new TreeMap<>();
private TreeMap<Integer, Double> team1 = new TreeMap<>();
private TreeMap<Integer, Double> team2 = new TreeMap<>();
public void createTeam()
{
teamScoreMap.put(001, 5.0);
teamScoreMap.put(002, 8.4);
teamScoreMap.put(003, 2.1);
teamScoreMap.put(004, 6.5);
teamScoreMap.put(005, 4.5);
teamScoreMap.put(006, 3.2);
teamScoreMap.put(007, 9.8);
teamScoreMap.put(008, 7.6);
}
Run Code Online (Sandbox Code Playgroud) 关于数组的算法设计我有一个问题,应该用C语言实现.假设我们有一个有n个元素的数组.为简单起见,n是'2'的幂1, 2, 4, 8, 16 , etc
.我想用(n/2)
元素将它分成两部分.分离的条件是lowest absolute difference between sum of all elements in two arrays
,例如,如果我有这样的阵列(9,2,5,3,6,1,4,7)
将是单独的对这些阵列(9,5,1,3)
和(6,7,4,2)
.第一个数组的元素18
的总和是和第二个数组的元素的总和是19
,差异是1,这两个数组是答案,但是两个数组喜欢(9,5,4,2)
并且(7,6,3,1)
不是答案,因为元素求和的差异是4
我们已经找到的1
.所以4
不是最小的差异.怎么解决这个?谢谢.