Python程式:查詢K數對的最大數量


假設我們有一個名為nums的陣列和另一個值k。在一個操作中,我們可以選擇nums中的兩個元素,其和等於k,並將它們從陣列中刪除。我們必須找到可以對陣列執行的最大運算元。

因此,如果輸入類似於nums = [8,3,6,1,5] k = 9,則輸出將為2,因為我們可以刪除總和為9的[3,6],然後刪除總和也為9的[8,1]。

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

  • counter := 一個對映,儲存nums中每個專案的頻率
  • res := 0
  • 對於counter中的每個num,執行:
    • 如果counter[k-num]不為零,則
      • 如果num與k - num不同,則
        • res := res + counter[num]和counter[k-num]中的最小值
        • counter[k-num] := 0
        • counter[num] := 0
      • 否則,
        • res := res + (counter[num] / 2) 的商
  • 返回res

示例

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

from collections import Counter
def solve(nums, k):
   counter = Counter(nums)
   res = 0
   for num in counter:
      if counter.get(k-num, 0):
         if num != k - num:
            res += min(counter[num], counter[k-num])
            counter[k-num] = 0
            counter[num] = 0
         else:
            res += int(counter[num] / 2)

   return res

nums = [8,3,6,1,5]
k = 9
print(solve(nums, k))

輸入

[8,3,6,1,5], 9

輸出

2

更新於:2021年10月6日

485 次瀏覽

開啟您的職業生涯

完成課程獲得認證

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