书籍复印

https://www.lintcode.com/problem/437

给定n本书,第i本书有pages[i]页。有k个人来抄这些书。

这些书排成一行,每个人都可以索取连续一段的书。例如,一个抄书人可以连续地将书从第i册复制到第j册,但是他不能复制第1册、第2册和第4册(没有第3册)。

他们在同一时间开始抄书,每抄一页书都要花1分钟。为了让最慢的抄书人能在最早的时间完成书的分配,最好的策略是什么?

请返回最慢抄书人花费的最短时间。

书籍页数总和小于等于2147483647

样例

样例 1:

输入: pages = [3, 2, 4], k = 2输出: 5解释: 第一个人复印前两本书, 耗时 5 分钟. 第二个人复印第三本书, 耗时 4 分钟.

样例 2:

输入: pages = [3, 2, 4], k = 3输出: 4解释: 三个人各复印一本书.

挑战

时间复杂度 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

Was this helpful?