九章算法官网-原文网址:

http://www.jiuzhang.com/problem/2/

题目

有n本书和k个抄写员。要求n本书必须连续地分配给这k个抄写员抄写。也就是说前a1本书分给第一个抄写员,接下来a2本书分给第二个抄写员,如此类推(a1,a2需要你的算法来决定)。给定n,k和每本书的页数p1,p2..pn,假定每个抄写员速度一样(每分钟1页),k个抄写员同时开始抄写,问最少需要多少时间能够将所有书全部抄写完工?(提示:本题有很多种算法可以在不同的时间复杂度下解决,需要尽可能的想到所有的方法)

解答

解法1:动态规划

设f[i][j]代表前i本书分给j个抄写员抄完的最少耗时。答案就是f[n][k]。状态转移方程f[i][j] = min{max(f[x][j-1], sum(x+1, i)), j<x<i}。其中x是在枚举第j个抄写员是从哪本书开始抄写。

时间复杂度O(n^2*k)

解法2;动态规划+决策单调。

同上一解法,但在x的枚举上进行优化,设s[i][j]为使得f[i][j]获得最优值的x是多少。有s[i][j-1]>=s[i][j]>=s[i-1][j]。因此x这一层的枚举不再是每次都是n而是总共加起来n。

时间复杂度O(n*k)

解法3:二分答案

二分答案,然后尝试一本本的加进来,加满了就给一个抄写员。看最后需要的抄写员数目是多余k个还是少于k个,然后来决定是将答案往上调整还是往下调整。

时间复杂度O( n log Sum(pi) )

面试官角度

该问题的考点在于算法能力。需要一定的算法积累,如对动态规划和二分法的算法积累。面试官不一定会需要你答出所有的解法(根据职位要求和招聘名额来看了),但是你答出多少就能够大概知道你在算法能力上的水平是多少。一般来讲至少需要答出动态规划的解法,因为只要稍微做过一点动态规划的训练,都是可以想出来的。

九章算法面试题2 抄书问题相关推荐

  1. 九章算法面试题27 最大连续子集

    九章算法官网-原文网址 http://www.jiuzhang.com/problem/27/ 题目 给一个整数集合S,定义S的子集D为连续子集当且仅当D中的整数构成连续的整数序列.求S的最大连续子集 ...

  2. 九章算法面试题72 翻转链表I

    九章算法官网-原文网址 http://www.jiuzhang.com/problem/73/ 题目 给一个链表,然后我们要把这个链表进行翻转. 在线测试本题 http://www.lintcode. ...

  3. 九章算法面试题13 随机数生成器

    九章算法官网-原文网址 http://www.jiuzhang.com/problem/13/ 题目 有一个随机数生成器,每次等概率的返回1到5中的一个整数.现在需要你利用这个随机数生成器来设计一个新 ...

  4. 九章算法面试题54 带重复元素的全排列

    九章算法官网-原文网址 http://www.jiuzhang.com/problem/54/ 题目 给定一个带重复元素的整数集合,求出这个集合中所有元素的全排列.对于集合[1,1,2],其本质不同的 ...

  5. 九章算法面试题87 最小子数组

    原文网址 www.jiuzhang.com 问题详情 给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 在线评测本题: http://www.lintcode.com/zh-cn/prob ...

  6. 九章算法面试题86 合并排序数组

    原文网址 www.jiuzhang.com 问题详情 合并两个排序的整数数组A和B变成一个新的数组. 在线评测本题: http://www.lintcode.com/zh-cn/problem/mer ...

  7. 九章算法面试题81 岛屿的个数

    原文网址: www.jiuzhang.com 问题详情 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 在线评测本题: ...

  8. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  9. 力扣高频|算法面试题汇总(七):树

    力扣高频|算法面试题汇总(一):开始之前 力扣高频|算法面试题汇总(二):字符串 力扣高频|算法面试题汇总(三):数组 力扣高频|算法面试题汇总(四):堆.栈与队列 力扣高频|算法面试题汇总(五):链 ...

最新文章

  1. dubbo 自定义过滤器,打印接口调用信息
  2. CentOS在安装配置 Ngnix_tomcat_PHP_Mysql
  3. rbac权限管理5张表_PHP之常用的RBAC权限管理详解
  4. 70条WB, IHC常见实验问题解决方案汇总
  5. 程序员选择字体的标准是
  6. V210 SPI驱动分析
  7. qunit 前端脚本测试用例
  8. 第三节 整型和浮点型
  9. POJ3262 Protecting the Flowers【贪心】
  10. 如何解决Silverlight跨域访问安全性问题
  11. c语言编程 要有菜单工作界面,使用C语言图形界面进行编程
  12. [论文]著名会议和期刊
  13. 《大家来找茬》游戏辅助工具开发
  14. 深圳大学计算机研究生调剂,深圳大学2020年硕士研究生招生调剂办法
  15. 有关林达华的几个地址
  16. Linux PAM 验证
  17. ZZNU 1995: cots' times
  18. 使用计算机读取其时钟值,计算机网络中的时间同步
  19. js调用APP后,如果有App直接进App,没有则进入App下载页面
  20. AD20怎样生成PCB文件??

热门文章

  1. 【2阶】BootStrap制作简易CRM管理系统-crm-1
  2. 【服务器数据恢复】Raid阵列更换故障硬盘后数据同步失败的数据恢复案例
  3. 为什么互联网的员工都容易掉头发?
  4. Win10上安装anaconda深度学习开发环境
  5. 第七届蓝桥杯单片机省赛题目解析
  6. html获取选中复选框的值,jquery获取复选框被选中的值
  7. 黑马程序员--黑马程序员CEO方立勋致全体员工和同学们的公开信
  8. 剪刀石头布微信小程序源码
  9. Cesium中实时显示经纬度及视角高
  10. L4 U2 描述他人