此题目要求从两个数组中各选一个数进行交换,使得交换后两数组的总和相等。首先,我们计算两数组之和的差值 diff = sum(array1) - sum(array2)。如果我们从 array1 中选一个值 a 从 array2 中选一个值 b 进行交换,使得 sum(array1) - a + b = sum(array2) - b + a,这意味着 2a - 2b = diff,即 a - b = diff / 2。因此,对于 array1 中的每个元素 a,我们计算 b = a - diff / 2,然后检查 b 是否存在于 array2 中。为了快速查找,我们可以将 array2 的元素存储在一个集合中。如果找到符合条件的 a 和 b,返回 [a, b];否则返回一个空数组。
时间复杂度: O(n)
空间复杂度: O(n + m)
class Solution:
def findSwapValues(self, array1: List[int], array2: List[int]) -> List[int]:
# 计算两数组和的差值
diff = sum(array1) - sum(array2)
# 创建两个集合以快速判断元素是否存在
set1, set2 = set(array1), set(array2)
# 遍历第一个数组的集合
for a in set1:
b = (2 * a - diff) // 2
# 检查计算出的 b 是否真实存在于第二个数组中
if 2 * b == 2 * a - diff and b in set2:
return [a, b]
return []