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

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. 【译】An Opinionated Introduction to AutoML and Neural Architecture Search
  2. PBS_HAS_CHANGED ~ GET_SAP_MENU_INFO
  3. GraphQL在SAP Kyma中的广泛应用
  4. 计算机中考什么时候报名,中考报名时间
  5. 两个datatable的比较
  6. Vue.js 2.x笔记:指令(4)
  7. Java案例:汉诺塔问题
  8. 【零基础学Java】—Socket类(五十五)
  9. Eclipse的两个hibernate plugin
  10. 常用图像处理相关图像数据库
  11. LPDDR4 layout instruction
  12. nginx 配置外网域名跳转到内网地址加端口的教程
  13. UE4编译错误:Unable to delete XXX
  14. Linux设备驱动开发详解 第3版 (即 Linux设备驱动开发详解 基于最新的Linux 4 0内核 )前言
  15. js和jsp的区别和联系
  16. 【设计】死区时间控制
  17. CF833D Red-Black Cobweb 点分治、树状数组
  18. caffe配置 一生不可自决
  19. Hyper Text Markup Language 超文本标记语言
  20. 虚拟机 报错:Unmount and run xfs_repair

热门文章

  1. SQL数据类型急速入门
  2. AutoJs学习-天猫养猫活动
  3. 易语言对接免签码支付
  4. 《linux就该这么学——笔记》第7章 使用RAID与LVM磁盘阵列技术
  5. 牛逼的C/C++程序员是如何练成的?
  6. ajax实现翻书效果,jquery实现的翻书效果
  7. PHP 介绍php的一些基本语法,配合wamp,跟着案例来学习GET和POST请求( 非常详细 )
  8. 带有汉字的字符串截断出现半个“汉字”的解决方法-C语言源码
  9. 计算任意时刻椭圆轨道上行星的位置的插值方法
  10. 使用代理爬去微信公众号_公众号粉丝从0到1000的引流思路企业如何做好微信公众号运营?公众号运营技巧,你都知道吗?微信公众号怎么去推广运营?...