检查数组是否可以分成对,其和在Python中可被k整除
假设我们有一个数字数组,又有另一个数字k,我们必须检查给定的数组是否可以分为几对,以便每一对的总和能被k整除。
因此,如果输入像arr=[5,15,6,9]k=7,那么输出将为True,因为我们可以选择(5,9)和(15,6)对。
为了解决这个问题,我们将遵循以下步骤-
n:=数组大小
如果n为奇数,则
返回False
出现次数:=空字典,如果某个键不存在,则返回0作为该丢失键的值
对于0到n范围内的i,执行
将出现次数[(((array[i]modk)+k)modk]增加1
对于0到n范围内的i,执行
返回False
如果出现次数[余数]AND1不为零,则
返回False
如果出现次数[余数]为奇数,则
返回False
余数:=(((array[i]modk)+k)modk
如果2*余数与k相同,则
否则,当余数等于0时,则
否则,当incidences[remainder]与excences[k-mainder]不同时,则
返回True
让我们看下面的实现以更好地理解-
示例
from collections import defaultdict
def solve(array, k):
n = len(array) if n % 2 != 0:
return False
occurrences = defaultdict(lambda : 0)
for i in range(0, n):
occurrences[((array[i] % k) + k) % k] += 1
for i in range(0, n):
remainder = ((array[i] % k) + k) % k
if (2 * remainder == k):
if (occurrences[remainder] % 2 != 0):
return False
elif (remainder == 0):
if (occurrences[remainder] & 1):
return False
elif (occurrences[remainder] != occurrences[k - remainder]):
return False
return True
arr = [5, 15, 6, 9]
k = 7
print(solve(arr, k))输入值
[5, 15, 6, 9], 7输出结果
True