class Solution {
private:
bool valid(int target,vector<int>& nums,int m)
{
int count=1;//count应该初始化1
int total=0;
for(int num:nums)
{
total+=num;
if(total>target){
count++;
total=num;
if(count>m)
return false;
}
}
return true;
}
public:
int splitArray(vector<int>& nums, int m) {
int nummax=0;
int sum=0;
for(int num:nums)
{
nummax=max(nummax,num);
sum+=num;
}
if(m==1)
return sum;
int l=nummax;
int r=sum;
while(l<=r)
{
int mid=(l+r)/2;
if(valid(mid,nums,m))//可以将nums 分成小于等于m分 按照每份最大为mid
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return l;
}
};