书籍复印
https://www.lintcode.com/problem/437
给定n
本书,第i
本书有pages[i]页
。有k
个人来抄这些书。
这些书排成一行,每个人都可以索取连续一段的书。例如,一个抄书人可以连续地将书从第i
册复制到第j
册,但是他不能复制第1册、第2册和第4册(没有第3册)。
他们在同一时间开始抄书,每抄一页书都要花1分钟。为了让最慢的抄书人能在最早的时间完成书的分配,最好的策略是什么?
请返回最慢抄书人花费的最短时间。
书籍页数总和小于等于2147483647
样例
样例 1:
样例 2:
挑战
时间复杂度 O(nk)
解题思路:
关键在于搞定如何获得给定时间限制内,最少需要多少个人来复印。
首先,给定的时间在max(pages)到sum(pages)之间。
其次,在max(pages)到sum(pages)之间进行二分。对于给定的limit(capacity),肯定是至少需要一个人来完成工作,因此person可以初始化为1。
然后,初始的复印数是0,每复印page页,check一下复印的总数目是否超过了limit,如果超过limit,那就要再加一个人来工作,person++。将累计复印的数目重置为0。继续循环。
最后返回结果是pages count,因为一页一分钟,所以也是时间数
Last updated