https://leetcode-cn.com/problems/divide-chocolate/
将求解问题改为判定问题。对于一个大小为val的数组和。判断可不可以将数组分为k+1组(其中最小的给第一个人即可)。每一组的之和都大于val。如果可以,说明比val小的都可以,就去尝试更大的val。二分val,对每个val判定即可。
class Solution {
public:
int maximizeSweetness(vector<int>& s, int K) {
int l = 0, r = 1e9 / (K + 1);
while(l < r)
{
int mid = l + r + 1 >> 1;
//cout << l << " " << r << endl;
int cur = 0, cnt = 0;
for(auto i : s)
{
cur += i;
if(cur >= mid)
{
cur = 0;
cnt++;
if(cnt > K) break;
}
}
if(cnt > K)
l = mid;
else
r = mid - 1;
}
return l;
}
};