力扣410.分割数组的最大值
-
分割数组 使得子数组最大值最小
- 凡是最小化最大值和最大化最小值的题都是二分答案
- 二分子数组最大值 求当前数组可以分为几段
cpp
class Solution {
public:
int splitArray(vector<int>& nums, int k) {
auto check = [&](int mid) -> bool
{
int cnt = 1,s = 0;
for(int x:nums)
{
if(s + x <= mid)
s += x;
else
{
if(cnt ++ == k) return false;
s = x;
}
}
return true;
};
int l = ranges::max(nums) , r = accumulate(nums.begin(),nums.end(),0);
while(l<r)
{
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
};