📅  最后修改于: 2023-12-03 15:12:23.177000             🧑  作者: Mango
给定两个长度相等的整数数组 A 和 B,只使用交换 A[i] 和 B[i] 的位置(i 是任意选择的索引), 判断是否能使 A 等于 B。
易知,两个数组相等,当且仅当它们的总和相等,即 sum(A) = sum(B)。
而对于交换后的两个数组 A 和 B,它们的总和可以理解为 sum(A) - A[i] + B[i] = sum(B) - B[i] + A[i]。
化简可得 A[i] - B[i] = (sum(A) - sum(B)) / 2。
如果 (sum(A) - sum(B)) / 2 不是整数,那么无论如何交换都不能相等。
否则,我们只需判断有没有任意一对 A[i] 和 B[j],满足 A[i] - B[i] = (sum(A) - sum(B)) / 2 且 A[j] - B[j] = (sum(B) - sum(A)) / 2。
class Solution:
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
diff = sum(target) - sum(arr)
if diff % 2 != 0:
return False
diff //= 2
target_set = set(target)
for num in arr:
if num + diff in target_set:
target_set.remove(num + diff)
else:
return False
return len(target_set) == 0