Python 中分配重複整數的程式
假設我們有一個數組 nums,最多有 50 個唯一值。我們還有一個名為 quantity 的陣列,其中 quantity[i] 表示第 i 個客戶訂購的值的數量。我們必須檢查是否可以分配 nums,使得
第 i 個客戶恰好獲得 quantity[i] 個專案,
第 i 個客戶獲得的值都相等,並且
所有客戶都滿意。
因此,如果輸入類似於 nums = [5,1,2,2,3,4,4,3,3] quantity = [2,2,3],則輸出將為 True,因為兩個客戶各想要兩個元素,因此他們可以獲得 [2,2] 和 [4,4],第三個客戶想要三個專案,他們可以獲得 [3,3,3],因此所有客戶都滿意。
為了解決這個問題,我們將遵循以下步驟 -
定義一個函式 util()。這將接收 i、cntr 作為引數。
如果 i 等於 quantity 的大小,則
返回 True
temp_counter := 建立 cntr 的副本
對於 cntr 中的每個 cnt,執行以下操作:
如果 cnt >= quantity[i],則
temp_counter[cnt] := temp_counter[cnt] - 1
如果 temp_counter[cnt] 等於 0,則
從 temp_counter 中刪除第 cnt 個元素
rem := cnt - quantity[i]
temp_counter[rem] := temp_counter[rem] + 1
如果 util(i+1, temp_counter) 為真,則
返回 True
temp_counter[rem] := temp_counter[rem] - 1
如果 temp_counter[rem] 等於 0,則
從 temp_counter 中刪除第 rem 個元素
temp_counter[cnt] := temp_counter[cnt] + 1
返回 False
從主方法中執行以下操作
cnt := 儲存 nums 中存在的數字的所有頻率的頻率的對映
按降序排列 quantity
返回 util(0, cnt)
示例
讓我們看看以下實現以獲得更好的理解
from collections import Counter
def solve(nums, quantity):
def util(i, cntr):
if i == len(quantity):
return True
temp_counter = cntr.copy()
for cnt in cntr:
if cnt >= quantity[i]:
temp_counter[cnt] -= 1
if temp_counter[cnt] == 0:
temp_counter.pop(cnt)
rem = cnt - quantity[i]
temp_counter[rem] += 1
if util(i+1, temp_counter):
return True
temp_counter[rem] -= 1
if temp_counter[rem] == 0:
temp_counter.pop(rem)
temp_counter[cnt] += 1
return False
cnt = Counter(Counter(nums).values())
quantity.sort(reverse=True)
return util(0, cnt)
nums = [5,1,2,2,3,4,4,3,3]
quantity = [2,2,3]
print(solve(nums, quantity))輸入
[0,1,2,3,4], [[3,1],[1,3],[5,6]]
輸出
True
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP