首页 > 代码库 > LintCode-Copy Books
LintCode-Copy Books
Given an array A of integer with size of n( means n books and number of pages of each book) and k people to copy the book. You must distribute the continuous id books to one people to copy. (You can give book A[1],A[2] to one people, but you cannot give book A[1], A[3] to one people, because book A[1] and A[3] is not continuous.) Each person have can copy one page per minute. Return the number of smallest minutes need to copy all the books.
您在真实的面试中是否遇到过这个题?Yes
例子
Given array A = [3,2,4]
, k = 2
.
Return 5
( First person spends 5 minutes to copy book 1 and book 2 and second person spends 4 minutes to copy book 3. )
挑战
Could you do this in O(n*k)
time ?
分析:仅仅会O(n*lgM),M为全部数的总和,能够看到,求最小要多少分钟。也就是大于这个数,都是能够的。而小于这个数则都是不能够的。于是能够利用二分来找到这个点
代码:
class Solution { public: /** * @param pages: a vector of integers * @param k: an integer * @return: an integer */ int copyBooks(vector<int> &pages, int k) { // write your code here int l = 0; int r = 99999999; while(l<r) { int mid = (l+r)/2; if(check(mid,pages,k)) { r = mid; } else l = mid+1; } return l; } bool check(int index,vector<int>& pages,int k) { int cnt = 0; int sum = 0; int i = 0; while(i<pages.size()) { if(sum+pages[i]<=index) { sum+=pages[i++]; } else if(pages[i]<=index) { cnt++; sum = 0; } else return false; } if(sum!=0) cnt++; return cnt<=k; } };
LintCode-Copy Books
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。