檢查 Python 中陣列的元素是否可以根據給定條件進行排列


假設我們有一個名為 nums 的陣列。我們必須檢查是否可以重新排列 nums 的元素,使其滿足以下條件:

因此,如果輸入類似於 nums = [8, -4, 4, -8],則輸出將為 True,因為如果我們將陣列排列為 [-4, -8, 4, 8],則對於 i = 0,nums[2*0 + 1] = 2 * (-4) = -8,對於 i = 1,nums[2*1 + 1] = 2 * 4 = 8

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

  • freq := 一個包含 nums 的元素及其頻率的對映
  • 對於 nums 中按絕對值排序的每個專案,執行以下操作:
    • 如果 freq[item] 為 0,則
      • 進行下一次迭代
    • 如果 freq[2 * item] 為 0,則
      • 返回 False
    • freq[item] := freq[item] - 1
    • freq[2 * item] := freq[2 * item] - 1
  • 返回 True

示例

讓我們看看以下實現以獲得更好的理解:

 即時演示

from collections import defaultdict
def solve(nums):
   freq = defaultdict(int)
   for item in nums:
      freq[item] += 1
   for item in sorted(nums, key = abs):
      if freq[item] == 0:
         continue
      if freq[2 * item] == 0:
         return False
      freq[item] -= 1
      freq[2 * item] -= 1
   return True
nums = [8, -4, 4, -8]
print(solve(nums))

輸入

[8, -4, 4, -8]

輸出

True

更新於: 2021年1月18日

210 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.