📅  最后修改于: 2023-12-03 14:54:07.605000             🧑  作者: Mango
给定 n 块巧克力和 k 个学生,每个巧克力的大小由数组 chocolate 中的元素表示。需要将这 n 块巧克力平均分配给 k 个学生,每个学生最少分配一块巧克力。
编写一个函数,返回平均分配巧克力的最大数量。
输入: chocolate = [1,2,3,4,5,6,7,8,9], k = 5 输出: 6 解释: 每个学生分配巧克力的数量应当是 6,最小的巧克力数量是 5,因此我们可以让第一个和第二个学生分配 [1,2,3],第三个和第四个学生分配 [4,5,6],第五个学生分配 [7,8,9]。
通过二分查找的方法,将问题转化成了另一个问题:如何判断是否能够将巧克力平均分配给所有学生,每个学生能够分到的巧克力数量为 value。
对于给定的 value,我们可以依次分配巧克力给每个学生,直到无法继续分配为止。如果最终能够将巧克力平均分配给所有学生,说明存在一种分配方案,使得每个学生分到的巧克力数量都不小于 value。
class Solution:
def can_divide(self, nums, k, value):
curr = 0
for num in nums:
curr += num // value
if curr >= k:
return True
return False
def maximizeSweetness(self, chocolate: List[int], k: int) -> int:
left, right = 1, sum(chocolate) // k
while left < right:
mid = (left + right + 1) // 2
if self.can_divide(chocolate, k, mid):
left = mid
else:
right = mid - 1
return left