九章算法面试题2 抄书问题
九章算法官网-原文网址:
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 抄书问题相关推荐
- 九章算法面试题27 最大连续子集
九章算法官网-原文网址 http://www.jiuzhang.com/problem/27/ 题目 给一个整数集合S,定义S的子集D为连续子集当且仅当D中的整数构成连续的整数序列.求S的最大连续子集 ...
- 九章算法面试题72 翻转链表I
九章算法官网-原文网址 http://www.jiuzhang.com/problem/73/ 题目 给一个链表,然后我们要把这个链表进行翻转. 在线测试本题 http://www.lintcode. ...
- 九章算法面试题13 随机数生成器
九章算法官网-原文网址 http://www.jiuzhang.com/problem/13/ 题目 有一个随机数生成器,每次等概率的返回1到5中的一个整数.现在需要你利用这个随机数生成器来设计一个新 ...
- 九章算法面试题54 带重复元素的全排列
九章算法官网-原文网址 http://www.jiuzhang.com/problem/54/ 题目 给定一个带重复元素的整数集合,求出这个集合中所有元素的全排列.对于集合[1,1,2],其本质不同的 ...
- 九章算法面试题87 最小子数组
原文网址 www.jiuzhang.com 问题详情 给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 在线评测本题: http://www.lintcode.com/zh-cn/prob ...
- 九章算法面试题86 合并排序数组
原文网址 www.jiuzhang.com 问题详情 合并两个排序的整数数组A和B变成一个新的数组. 在线评测本题: http://www.lintcode.com/zh-cn/problem/mer ...
- 九章算法面试题81 岛屿的个数
原文网址: www.jiuzhang.com 问题详情 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 在线评测本题: ...
- 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
- 力扣高频|算法面试题汇总(七):树
力扣高频|算法面试题汇总(一):开始之前 力扣高频|算法面试题汇总(二):字符串 力扣高频|算法面试题汇总(三):数组 力扣高频|算法面试题汇总(四):堆.栈与队列 力扣高频|算法面试题汇总(五):链 ...
最新文章
- 【译】An Opinionated Introduction to AutoML and Neural Architecture Search
- PBS_HAS_CHANGED ~ GET_SAP_MENU_INFO
- GraphQL在SAP Kyma中的广泛应用
- 计算机中考什么时候报名,中考报名时间
- 两个datatable的比较
- Vue.js 2.x笔记:指令(4)
- Java案例:汉诺塔问题
- 【零基础学Java】—Socket类(五十五)
- Eclipse的两个hibernate plugin
- 常用图像处理相关图像数据库
- LPDDR4 layout instruction
- nginx 配置外网域名跳转到内网地址加端口的教程
- UE4编译错误:Unable to delete XXX
- Linux设备驱动开发详解 第3版 (即 Linux设备驱动开发详解 基于最新的Linux 4 0内核 )前言
- js和jsp的区别和联系
- 【设计】死区时间控制
- CF833D Red-Black Cobweb 点分治、树状数组
- caffe配置 一生不可自决
- Hyper Text Markup Language 超文本标记语言
- 虚拟机 报错:Unmount and run xfs_repair
热门文章
- SQL数据类型急速入门
- AutoJs学习-天猫养猫活动
- 易语言对接免签码支付
- 《linux就该这么学——笔记》第7章 使用RAID与LVM磁盘阵列技术
- 牛逼的C/C++程序员是如何练成的?
- ajax实现翻书效果,jquery实现的翻书效果
- PHP 介绍php的一些基本语法,配合wamp,跟着案例来学习GET和POST请求( 非常详细 )
- 带有汉字的字符串截断出现半个“汉字”的解决方法-C语言源码
- 计算任意时刻椭圆轨道上行星的位置的插值方法
- 使用代理爬去微信公众号_公众号粉丝从0到1000的引流思路企业如何做好微信公众号运营?公众号运营技巧,你都知道吗?微信公众号怎么去推广运营?...