【精】LintCode领扣算法问题答案:437. 书籍复印
发布日期:2021-06-30 17:13:29
浏览次数:2
分类:技术文章
本文共 1911 字,大约阅读时间需要 6 分钟。
437. 书籍复印
描述
给定 n 本书, 第 i 本书的页数为 pages[i]. 现在有 k 个人来复印这些书籍, 而每个人只能复印编号连续的一段的书, 比如一个人可以复印 pages[0], pages[1], pages[2], 但是不可以只复印 pages[0], pages[2], pages[3] 而不复印 pages[1].
所有人复印的速度是一样的, 复印一页需要花费一分钟, 并且所有人同时开始复印. 怎样分配这 k 个人的任务, 使得这 n 本书能够被尽快复印完?
返回完成复印任务最少需要的分钟数.
- 书籍页数总和小于等于2147483647
样例 1:
输入: pages = [3, 2, 4], k = 2输出: 5解释: 第一个人复印前两本书, 耗时 5 分钟. 第二个人复印第三本书, 耗时 4 分钟.
样例 2:
输入: pages = [3, 2, 4], k = 3输出: 4解释: 三个人各复印一本书.
挑战
时间复杂度 O(nk)
文章目录
题解
public class Solution { /** * @param pages: an array of integers * @param k: An integer * @return: an integer */ public int copyBooks(int[] pages, int k) { // write your code here // 最多就是一个人复印完,所以需要所有页数之和 int max = 0; // 最少的情况是每个人复印一本,所以最少需要花费那本页数最大的时间 int min = 0; for (int page : pages) { max += page; min = Math.max(min, page); } // 根据人数可以算出平均复制页数,或者说平均花费时间,而最终无论怎么分配,时间至少等于平均时间 min = Math.max(min, (max + k - 1) / k); // 二分查找法找到最佳点 int low = min; int high = max; while (low <= high) { int mid = (low + high) >>> 1; boolean ok = true; // 贪心算法计算按照给定时间至少需要几个人 int time = mid; // 需要人数 int ps = 1; for (int page : pages) { if (page > time) { time = mid; ++ps; if (ps > k) { ok = false; break; } } if (page < time) { time -= page; } } if (ok) { high = mid - 1; } else { low = mid + 1; } } return low; }}
最后说两句
非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~
作者水平有限,如果文章内容有不准确的地方,请指正。
希望小伙伴们都能每天进步一点点。
声明
本文由博客原创,转载请注明来源,谢谢~
转载地址:https://le-yi.blog.csdn.net/article/details/114287625 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月06日 10时34分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java 解析json
2019-04-30
java http请求
2019-04-30
tensorflow 数据格式
2019-04-30
tf rnn layer
2019-04-30
常用中间件
2019-04-30
tf input layer
2019-04-30
tf model create
2019-04-30
tf dense layer两种创建方式的对比和numpy实现
2019-04-30
tf initializer
2019-04-30
tf 从RNN到BERT
2019-04-30
tf keras SimpleRNN源码解析
2019-04-30
tf keras Dense源码解析
2019-04-30
tf rnn输入输出的维度和权重的维度
2019-04-30
检验是否服从同一分布
2019-04-30
tf callbacks
2019-04-30
keras、tf、numpy实现logloss对比
2019-04-30
Ubuntu20.04安装微信
2019-04-30
Restful风格的使用
2019-04-30
Swagger基础入门整合SpringBoot
2019-04-30
MyBatisPlus简单入门(SpringBoot)
2019-04-30