在 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