检查数组是否可以分成对,其和在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] mod k)+ k)mod k]增加1

  • 对于0到n范围内的i,执行

    • 返回False

    • 如果出现次数[余数] AND 1不为零,则

    • 返回False

    • 如果出现次数[余数]为奇数,则

    • 返回False

    • 余数:=(((array [i] mod k)+ k)mod k

    • 如果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