📅  最后修改于: 2023-12-03 15:26:25.731000             🧑  作者: Mango
在一个整数数组中,从中选出两个数对(每个数对由两个不同的数组成),要求这两个数对没有任何重叠的数,且它们的和要尽可能的大。输出这个最大的和。
输入:[1, 4, 2, 3], 输出:8
输入:[4, 2, 10, 5, 1, 6], 输出:21
首先,我们可以先将数组从大到小排序。然后,我们选取第一对数(x, y),他们的和是最大的,然后我们从剩下的数中选取第二组数(u, v),此时的和是最大的,而且它们没有任何重叠的数。
我们可以枚举第一组数(x, y),并在剩下的数中寻找第二组数(u, v),计算它们的和,并将这个和与之前计算的和最大值进行比较。判断是否需要更新最大值。
def max_sum_pair(arr):
arr.sort(reverse=True)
max_sum = 0
for i in range(len(arr)):
for j in range(i+1, len(arr)):
s1 = arr[i] + arr[j]
for k in range(j+1, len(arr)):
for l in range(k+1, len(arr)):
if ((i != k) and (i != l) and (j != k) and (j != l)):
s2 = arr[k] + arr[l]
if s1 + s2 > max_sum:
max_sum = s1 + s2
return max_sum
排序使用 sort()
函数,最坏时间复杂度为 O(n*log(n))。遍历数组使用了 4 层循环,时间复杂度为 O(n^4)。因此,程序的时间复杂度为 O(n^4)。空间复杂度是 O(1)。