算法:割绳子问题(字节跳动2019笔试)
@[算法] 割绳子问题(字节跳动2019笔试)
字节跳动2019笔试题
问题描述
总共有n条长度不等绳子,可以任意切割,不能拼接。要求切割后得到m条长度相等的绳子,求问得到的m条绳子长度L的最大值
输入 : 绳子条数n;表示绳子长度的n维数组l,要求输出的绳子长度m;
输出: 长度最大值L
解法
用n维数组l的每一个数除以1,2,3, …, m,得到m*n个数,即l[0], l[0]/2, …, l[0]/m,
l[1], l[1]/2, …, l[n-1]/m。将这m*n个数排序,得到数组sorted, 取其中第m大的元素即为长度L的最大值,即:L=sorted[m-1]
python代码
// source code
slist = []
for lw in l:for i in range(m)slist.append(lw/(i+1))
slist.sort(reverse = True)
L = slist[m-1]
思路解析
先考虑一种简化的情形,假设每一根绳子只能使用一次(即使绳子很长,可以切割出多条长度为L的小段,也只使用其中一段),那么这个问题就退化为一个简单的排序问题,直接找出其中第m长的绳子,其长度就是L的最大值。这种情形很简单。
再考虑一种稍微复杂一些的情形:假设每一根绳子最多只能使用两次,那么可以对l[0], l[1], …, l[n-1], l[0]/2, l[1]/2, …, l[n-1]/2 这2n个数排序,取其中第m大的数,其值就是L的最大值。
举个栗子,假设有n=4根绳,长度为a>b>c>d,又有b>a/2>c,要取出m=3条长度相等的绳。则对4*2=8个数排序后前三位是a,b,a/2. 那么长度L的最大值就是a/2;前三位中最长的绳出现了两次(a,a/2),第二长的绳出现了一次,而切割出的3个片段中最长的绳可以切出两个,第二次的绳可以切出一个,也就是说,每一根绳分出的片段数和它在排序后的数组的前m位中出现的次数是对应的。
如果把上面的条件改为a/2>b,则L的最大值就是b,同样是a分出两段,b分出一段。条件改为a/2<c,则L最大值为c,三根绳a, b, c各分出一段。
回到原来的问题,因为不限制每根绳的使用次数,所以一根绳最多使用m次(极端情况a/m>b),因此对l[0], l[1], …, l[n], l[0]/2, l[1]/2, …, l[n]/2, l[0]/3, …, l[n-1]/m共m*n个数排序,再取其第m大的元素既是L的最大值。这种情况下,“每一根绳分出的片段数和它在排序后的数组的前m位中出现的次数相等”这一条件依然能得到满足。
算法:割绳子问题(字节跳动2019笔试)相关推荐
- 字节跳动2019春招第二次笔试编程题
字节跳动2019春招第二次笔试编程题 1.变身程序员 题目描述 输入描述 输出描述 示例 示例1 示例2 示例3 分析 参考代码 2.特征提取 题目描述 输入描述 输出描述 示例 示例1 备注 分析 ...
- 字节跳动2019春招算法题
字节跳动2019春招算法题 1.总结 难度:容易到中等. 一些题出的太烂,不给数据范围,而且内存设置有问题,如果是刷题不建议刷. 2.题目 (1) 简单字符串模拟. #include<bits/ ...
- 字节跳动2019春招后端开发工程师-笔试题解析
一.简介 字节跳动2019春招第三批在线笔试(后端开发工程师)已结束,结果也是凉凉.本文主要是分析这次的题目,并给出代码,以供大家参考和讨论,如有错误之处,还望帮忙指正,谢谢每位优秀的程序员. 二.题 ...
- 【前端面试】字节跳动2019校招面经 - 前端开发岗(二)
[前端面试]字节跳动2019校招面经 - 前端开发岗(二) 因为之前的一篇篇幅有限,太长了看着也不舒服,所以还是另起一篇吧? 一. jQuery和Vue的区别 jQuery 轻量级Javascript ...
- 【字节跳动2019年】算法岗笔试题
题目描述: 字节跳动大街上有许多商铺,其中只有一部分为顾客开放厕所.街道办想提供一项便民服务, 在家商铺门口放一个标志,写明距离当前商铺最近的厕所有几个商铺的距离.如果当前商铺就有厕所,则标志为0.请 ...
- 字节跳动 2019 ICME 双赛道冠军团队方案分享
ICME 2019 短视频内容理解与推荐竞赛的颁奖仪式上个月在 ICME 大会上举办.此次竞赛由字节跳动与 ICME 联合举办,分为两个赛道,共有 2397 名参赛者组成 1025 支队伍参赛. 本文 ...
- 字节跳动2021笔试题目
今天参加了字节跳动的线上笔试,分享一波来告诉自己多学算法!
- 字节跳动java笔试题目_牛客网--字节跳动面试题--特征提取
牛客网--字节跳动面试题--特征提取 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 来源 链接:特征提取 来源:牛客网 题目 ...
- 【报告分享】字节跳动2019年企业社会责任报告.pdf(附下载链接)
大家好,我是文文(微信:sscbg2020),今天给大家分享字节跳动于2020年5月发布的报告<2019字节跳动(中国)企业社会责任报告.pdf>.字节跳动(中国)秉承"激发创造 ...
最新文章
- scikit正则化 API
- 不干胶标贴打印模板下载_A4纸打印17*6的不干胶标签打印模板如何设置
- servlet跳转页面的几种方法
- 3013-04-13 腾讯笔试
- 收集53个程序员段子
- T-SQL LIKE子句 模糊查询
- 计算机的定点运算器原理,计算机组成原理第二章第10讲定点运算器的组成.ppt
- mount 需要同时设置 noatime 和 nodiratime 吗?
- Mangos源码分析(15):游戏对象的实现
- hash算法在日常活动中的应用
- 关于某学习通网页鼠标不能移出视频窗口的问题
- css摇杆,【宅家呗专题】Virtual Joystick虚拟摇杆插件教程
- C语言打印100以内素数(开根号法)
- 写了三年程序,我25了.
- Android 单个指定蓝牙设备通讯流程
- oracle 11g 安装 先决性检查 环境变量,Window XP安装oracle11gR2数据库先决条件检查的问题解决(实测有效)...
- Vue——v-if控制元素是否显示
- 免费送全国计算机等级考试资料(新增Python题库)
- ubuntu企业微信和微信无法发送和显示图片和截图问题
- 黎明之路如何用电脑玩 黎明之路PC电脑版玩法教程