public int copyBooks(int[] pages, int k) {
int l = 0;
int r = 99999999;
while(l+1<r)
{
int mid = (l+r)/2;
if(check(mid,pages,k))
{
r = mid;
}
else
l = mid;
}
return r;
}
boolean check(int index,int[] pages,int k)
{
int count = 0;
int sum = 0;
for(int i=0;i<pages.length;)
{
if(sum+pages[i]<=index)
{
sum+=pages[i++];
}
else if(pages[i]<=index)
{
count++;
sum = 0;
}
else
return false;
}
if(sum!=0)
count++;
return count<=k;
}