@[算法] 割绳子问题(字节跳动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笔试)相关推荐

  1. 字节跳动2019春招第二次笔试编程题

    字节跳动2019春招第二次笔试编程题 1.变身程序员 题目描述 输入描述 输出描述 示例 示例1 示例2 示例3 分析 参考代码 2.特征提取 题目描述 输入描述 输出描述 示例 示例1 备注 分析 ...

  2. 字节跳动2019春招算法题

    字节跳动2019春招算法题 1.总结 难度:容易到中等. 一些题出的太烂,不给数据范围,而且内存设置有问题,如果是刷题不建议刷. 2.题目 (1) 简单字符串模拟. #include<bits/ ...

  3. 字节跳动2019春招后端开发工程师-笔试题解析

    一.简介 字节跳动2019春招第三批在线笔试(后端开发工程师)已结束,结果也是凉凉.本文主要是分析这次的题目,并给出代码,以供大家参考和讨论,如有错误之处,还望帮忙指正,谢谢每位优秀的程序员. 二.题 ...

  4. 【前端面试】字节跳动2019校招面经 - 前端开发岗(二)

    [前端面试]字节跳动2019校招面经 - 前端开发岗(二) 因为之前的一篇篇幅有限,太长了看着也不舒服,所以还是另起一篇吧? 一. jQuery和Vue的区别 jQuery 轻量级Javascript ...

  5. 【字节跳动2019年】算法岗笔试题

    题目描述: 字节跳动大街上有许多商铺,其中只有一部分为顾客开放厕所.街道办想提供一项便民服务, 在家商铺门口放一个标志,写明距离当前商铺最近的厕所有几个商铺的距离.如果当前商铺就有厕所,则标志为0.请 ...

  6. 字节跳动 2019 ICME 双赛道冠军团队方案分享

    ICME 2019 短视频内容理解与推荐竞赛的颁奖仪式上个月在 ICME 大会上举办.此次竞赛由字节跳动与 ICME 联合举办,分为两个赛道,共有 2397 名参赛者组成 1025 支队伍参赛. 本文 ...

  7. 字节跳动2021笔试题目

    今天参加了字节跳动的线上笔试,分享一波来告诉自己多学算法!

  8. 字节跳动java笔试题目_牛客网--字节跳动面试题--特征提取

    牛客网--字节跳动面试题--特征提取 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 来源 链接:特征提取 来源:牛客网 题目 ...

  9. 【报告分享】字节跳动2019年企业社会责任报告.pdf(附下载链接)

    大家好,我是文文(微信:sscbg2020),今天给大家分享字节跳动于2020年5月发布的报告<2019字节跳动(中国)企业社会责任报告.pdf>.字节跳动(中国)秉承"激发创造 ...

最新文章

  1. scikit正则化 API
  2. 不干胶标贴打印模板下载_A4纸打印17*6的不干胶标签打印模板如何设置
  3. servlet跳转页面的几种方法
  4. 3013-04-13 腾讯笔试
  5. 收集53个程序员段子
  6. T-SQL LIKE子句 模糊查询
  7. 计算机的定点运算器原理,计算机组成原理第二章第10讲定点运算器的组成.ppt
  8. mount 需要同时设置 noatime 和 nodiratime 吗?
  9. Mangos源码分析(15):游戏对象的实现
  10. hash算法在日常活动中的应用
  11. 关于某学习通网页鼠标不能移出视频窗口的问题
  12. css摇杆,【宅家呗专题】Virtual Joystick虚拟摇杆插件教程
  13. C语言打印100以内素数(开根号法)
  14. 写了三年程序,我25了.
  15. Android 单个指定蓝牙设备通讯流程
  16. oracle 11g 安装 先决性检查 环境变量,Window XP安装oracle11gR2数据库先决条件检查的问题解决(实测有效)...
  17. Vue——v-if控制元素是否显示
  18. 免费送全国计算机等级考试资料(新增Python题库)
  19. ubuntu企业微信和微信无法发送和显示图片和截图问题
  20. 黎明之路如何用电脑玩 黎明之路PC电脑版玩法教程

热门文章

  1. 5G标准化进程提速 射频器件市场空间将打开
  2. top-level object
  3. 硅芯思见:“软约束”到底有多“软”
  4. 月薪30K的90后程序员,下班后都在干什么?
  5. LDA主题模型的原理及使用教程
  6. 号脉数据中心全生命周期,业务永续从细节做起
  7. h5怎么区分在ios、安卓、微信环境下?怎么调用原生函数
  8. 前端性能优化之优化图片
  9. mc9s08dz60添加BootLoader实现CANboot下载更新功能
  10. 1688商品详情SKU