Python程式:檢查列表能否被劃分成各對之和是k的倍數


假設我們有一個名為nums的數字列表和另一個值k,我們需要檢查該列表能否被劃分成對,使得每對的和都能被k整除。

因此,如果輸入類似於nums = [4, 7, 2, 5] k = 6,則輸出為True,因為我們可以將給定列表劃分為(4, 2)和(8, 1)這樣的對,它們的和都能被3整除。

為了解決這個問題,我們將遵循以下步驟:

  • 如果nums包含偶數個元素,則
    • 返回False
  • count := 一個大小為k並填充0的列表
  • 對於nums中的每個n,執行:
    • count[n mod k] := count[n mod k] + 1
  • 如果count[0]是偶數,則
    • 返回False
  • 對於從1到(k / 2)的商的範圍i,執行:
    • 如果count[i]與count[k - i]不相等,則
      • 返回False
  • 返回True

讓我們看一下下面的實現以更好地理解。

示例

線上演示

class Solution:
   def solve(self, nums, k):
      if len(nums) % 2:
         return False

      count = [0] * k
      for n in nums:
         count[n % k] += 1

      if count[0] % 2:
         return False

      for i in range(1, k // 2 + 1):
         if count[i] != count[k - i]:
            return False
      return True

ob = Solution()
nums = [4, 7, 2, 5]
k = 6
print(ob.solve(nums, k))

輸入

[4, 7, 2, 5], 6

輸出

True

更新於:2020年11月26日

59 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.