题目地址:
https://leetcode.com/problems/maximum-candies-allocated-to-k-children/description/
给定一个长 n n n正整数数组 a a a,再给定一个正整数 k k k,求最大的 x x x使得 ∑ i ⌊ a [ i ] / x ⌋ ≥ k \sum_i \lfloor a[i]/x\rfloor\ge k ∑i⌊a[i]/x⌋≥k。
可以用二分答案。代码如下:
class Solution {
public:
using ll = long long;
int maximumCandies(vector<int>& cs, ll k) {
auto f = [&](int x) -> bool {
ll res = 0;
for (int c : cs) res += c / x;
return res >= k;
};
int l = 1, r = *max_element(cs.begin(), cs.end());
while (l < r) {
int mid = l + (r - l + 1 >> 1);
if (f(mid))
l = mid;
else
r = mid - 1;
}
return f(l) ? l : 0;
}
};
时间复杂度 O ( n + log ( max a − min a ) ) O(n+\log (\max a-\min a)) O(n+log(maxa−mina)),空间 O ( 1 ) O(1) O(1)。