题目描述:给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。
解题思路:如果x
与y
的和能被k整除,那说明x%k+y%k
能被k整除,因此我们对arr数组中的每个数对k取模,用哈希表记录每个余数出现的次数,然后按照余数进行配对,如果余数为零,那么要求0出现的次数为偶数,对其他的余数t,要求k-t出现的次数和t出现次数相同,代码如下:
class Solution:
def canArrange(self, arr: List[int], k: int) -> bool:
mod = [0] * k
for num in arr:
mod[num%k] += 1
for i in range(1, k):
if mod[i] != mod[k-i]:
return False
return mod[0] % 2 == 0