***Allocate Books
Problem Link: https://www.interviewbit.com/old/problems/allocate-books/
class Solution:
# @param A : list of integers
# @param B : integer
# @return an integer
def books(self, bookarr, students):
def allocate(bookarr,l,h,students,mid):
maxPages=mid
studCount=1
pageCount=0
for i in range(len(bookarr)):
if(bookarr[i]>maxPages):
return False
if(pageCount+bookarr[i]>maxPages):
studCount+=1
if(studCount>students):
return False
pageCount=bookarr[i]
else:
pageCount=pageCount+bookarr[i]
return True
def bsearch(l,h,bookarr):
if(l<=h):
mid=(l+h)//2
if(allocate(bookarr,l,h,students,mid)==True):
# print("true",mid)
self.ans=min(self.ans,mid)
bsearch(l,mid-1,bookarr)
else:
bsearch(mid+1,h,bookarr)
return self.ans
n=len(bookarr)
l=max(bookarr)
h=sum(bookarr)
# If there are not enough books,
# return
if(n<students):
return -1
self.ans=float('inf')
bsearch(l,h,bookarr)
return self.ans
Last updated