使用Python檢查陣列對是否可被k整除的程式


假設我們有一個名為nums的陣列,該陣列包含偶數個元素,還有一個值k。我們必須將nums分成恰好n/2對,使得每對的和都能被k整除。如果我們可以這樣做,則返回true,否則返回false。

因此,如果輸入類似於nums = [9,5,3,4,7,10,20,8] k = 3,則輸出將為True,因為我們可以構成如下對:(9,3), (5,7), (4,20), (8,10),所有對的和都能被3整除。

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

  • dp := 新列表

  • count:= 0

  • 對於nums中的每個x,執行:

    • t:= k - (x mod k)

    • 如果t等於k,則:

      • count := count + 1

    • 否則:

      • 將t插入dp的末尾

  • 如果count mod 2不等於0,則:

    • 返回False

  • 對列表dp進行排序

  • low := 0

  • high := dp的大小 - 1

  • 當low < high時,執行:

    • 如果dp[low] + dp[high]不等於k,則:

      • 返回False

    • low := low + 1

    • high := high - 1

  • 返回True

讓我們來看下面的實現,以便更好地理解:

示例

 線上演示

def solve(nums, k):
   dp=[]
   count=0
   for x in nums:
      t=k-(x % k)
      if t == k:
         count+=1
      else:
         dp.append(t)
   if count % 2 != 0:
      return False
   dp.sort()
   low = 0
   high = len(dp)-1
   while low < high:
      if dp[low] + dp[high] != k:
         return False
      low += 1
      high -= 1
   return True
nums = [9,5,3,4,7,10,20,8]
k = 3
print(solve(nums, k))

輸入

[9,5,3,4,7,10,20,8], 3

輸出

True

更新於:2021年5月29日

262 次瀏覽

開始您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.