leetcode力扣刷题打卡
题目:2226. 每个小孩最多能分到多少糖果
描述:给你一个 下标从 0 开始 的整数数组 candies 。数组中的每个元素表示大小为 candies[i] 的一堆糖果。你可以将每堆糖果分成任意数量的 子堆 ,但 无法 再将两堆合并到一起。
另给你一个整数 k 。你需要将这些糖果分配给 k 个小孩,使每个小孩分到 相同 数量的糖果。每个小孩可以拿走 至多一堆 糖果,有些糖果可能会不被分配。
返回每个小孩可以拿走的 最大糖果数目 。
解题思路
1、二分;
原代码##
class Solution {
public:
typedef long long ll;
int maximumCandies(vector<int>& candies, long long k) {
ll n = candies.size();
int maxnum = 0;
for (int i = 0; i < n; ++i) {
maxnum = max(maxnum, candies[i]);
}
ll l = 0, r = maxnum;
while (l != r) {
ll mid = (l + r + 1) >> 1;
ll cnt_child = 0;
for (int i = 0; i < n; ++i) {
cnt_child += candies[i] / mid;
}
if (cnt_child < k) r = mid - 1;
else l = mid;
}
return l;
}
};