给你一个 下标从 0 开始 的整数数组 candies 。
数组中的每个元素表示大小为 candies[i] 的一堆糖果。
你可以将每堆糖果分成任意数量的 子堆 ,但无法再将两堆合并到一起。
另给你一个整数 k 。你需要将这些糖果分配给 k 个小孩,使每个小孩分到 相同 数量的糖果。
每个小孩可以拿走 至多一堆 糖果,有些糖果可能会不被分配。
返回每个小孩可以拿走的 最大糖果数目
解题思路:
题干就是说,从每一堆糖都平均除以某个糖数,份数要等于人数 ——> 每人最多多少糖
class Solution(object):
def maximumCandies(self, candies, k):
# 计算当前总糖果数
# 如果小于人数 说明没人分不到一个 返回0
totalCandy = sum(candies)
if totalCandy < k:
return 0
# 每人最少1个 最多total//K个
min_, max_ = 1, totalCandy//k
while min_ <= max_:
middleCandy = min_ + (max_-min_)//2
# 在分得平均糖数最大值和最小值之间寻找中间值
# 计算当前 每人从糖堆分得平均数 人数是否还是满足k个
nowTotalPerson = [i//middleCandy for i in candies]
cnt = sum(nowTotalPerson)
# 如果当前人数满足K人, 那就增大每人平均糖数
if cnt >= k:
min_ = middleCandy + 1
# 如果当前人数不满足K人, 那就减小每人平均糖数
else: # cnt <= k
max_ = middleCandy - 1
return max_