在 Python 中分发重复整数的程序
假设我们有一个数组nums,最多有50个唯一值。我们还有另一个称为数量的数组,其中数量[i]表示第i个客户ordered.We必须检查是否可以分配nums的值的数量,使得
第i个客户得到的正是数量[i]的物品,
第i个客户得到的价值都是相等的,并且
所有客户都很满意。
因此,如果输入类似于nums=[5,1,2,2,3,4,4,3,3]数量=[2,2,3],那么输出将为True,因为两个客户想要两个元素每个,所以他们可以得到[2,2]和[4,4],第三个想要三个项目,他们可以得到[3,3,3],所以都满足了。
示例
让我们看下面的实现来更好地理解
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