实际上就是数组切割题型,相当于给你一个数组,让你切割 n 下,那么可以把数组切割成 n + 1 个子数组,怎么样切割,才能让最大子数组的和最小?
参考Leetcode 410 分割数组的最大值

说人话就是:

题中给的例子 8 5 6 5 6 7 6 6 3 1,第一个数字8为音符个数n,第二个数字5为跑步时长m(分钟),也就是把n个数分成m组,让找到一种方法,让分组后的组内和的最大值 最小

其实是相当于在n个数间插入m-1个棍,将其分为m组(对应m分钟),分组的和的最大值就是这一种分法的步长,求所有分法中步长最小的那一种。

方法一:

对于这个例子,共8个元素,要把这8个元素变为5个,但是总和不能变,每次个数-1时,合并相邻元素之和最小的数。也就是当8个元素变成7个时,相邻元素和最小的是最后的2个,所以3与1相加为4,加入链表中,而之前的3,1被删掉了,合并后会成为下面的数据:
6 5 6 7 6 6 4
然后之后相邻和最小的就是6和4:
6 5 6 7 6 10
之后6和5:
11 6 7 6 10
也就是原始数据中的:
6 5 || 6 || 7 || 6 || 6 3 1
此时数据元素为要求的5个(分成了5组),所以合并接受,要求的结果就是这组数据中最大的那个,那就是11。返回11就是结果了。

方法二:二分法

这道题的意思是要将所有n个数字分为m组,而实际情况
如果分的组数尽可能多的话最多为n组,步长为最大数字;
如果分的组数尽可能少的话最少为1组,步长为n个数字的和;
所以步长有个上下界,分别是max(nums)和sum(nums),分别设置为low和high,进行二分搜索。
主要思想是
mid=(low+high)//2,判断以mid作为题目所求所有组的最大步长时,需要分成多少组(或需要多少分钟),用def countM()计算:

  • 如果个数少于m,说明组分太大了,步长过大,在[low, mid-1]继续循环;
  • 如果个数多于m,说明组分小了,步长过小,在[mid+1,high]继续循环;
  • 而如果个数刚好等于m,说明满足条件,但是不知道这个mid是不是所求的最小值,所以在[low, mid]中再去找找看有没有满足条件的更小的。

代码:二分法(Python)

#countM计算以mid作为steps步长时所需要的分组数或分钟数
def countM(data, steps):    #steps就是假设的mid,步长;time = 1  # 最少也要一分钟stepSUM = 0  # 前k步步数总和for c in data:if stepSUM + c > steps:  # 前k步步数和大于step(最大步数):stepSUM = c            #将当前组的步长和重置为ctime += 1            #分组数,也就是时间time+1else:stepSUM += c        #如果没有超出mid(也就是steps规定的最大步长),那就加进去继续循环return time                #返回以当前steps作为步长所分成的组数n, m = list(map(int, input().strip().split()))    #list可以不用
data = list(map(int, input().strip().split()))
#这道题的意思是要将所有n个数字分为m组,而实际情况如果分的组数尽可能多的话最多为n组,步长为最大数字;分组尽可能少的话最少为1组,步长为n个数字的和;
#所以步长有个上下界,分别是max(nums)和sum(nums)
low = max(data)
high = sum(data)while low < high:mid = int(low + (high - low) / 2)    #步长mid二分法,其实mid是stepstime = countM(data, mid)    #假设mid是分割结果中的最大步长的最小值,判断所需要的时间time(也就是分成的组数)if time > m:      #花费时间大于规定时间 m,故最大步数要增大low = mid + 1elif time < m:    #花费时间小于规定时间 m,故最大步数要减少high = mid - 1else:             #如果满足条件的话,暂存,去寻找是不是有更小的,直到low<high不再满足high = mid
print(low)

[编程题]Shopee的零食柜:二分法(情景题,理解题意很重要)相关推荐

  1. shopee的零食柜-动态规划-校招编程真题

    题目描述 shopee的零食柜,有着各式各样的零食,但是因为贪吃,小虾同学体重日益增加,终于被人叫为小胖了,他终于下定决心减肥了,他决定每天晚上去操场跑两圈,但是跑步太累人了,他想转移注意力,忘记痛苦 ...

  2. shopee的零食柜

    题目描述   shopee的零食柜,有着各式各样的零食,但是因为贪吃,小虾同学体重日益增加,终于被人叫为小胖了,他终于下定决心减肥了,他决定每天晚上去操场跑两圈,但是跑步太累人了,他想转移注意力,忘记 ...

  3. Shopee:Shopee的零食柜(C++语言实现)

    题目描述 shopee的零食柜,有着各式各样的零食,但是因为贪吃,小虾同学体重日益增加,终于被人叫为小胖了. 他终于下定决心减肥了,他决定每天晚上去操场跑两圈,但是跑步太累人了,他想转移注意力,忘记痛 ...

  4. 【牛客网】Shopee的零食柜(代码)

    题目描述 shopee的零食柜,有着各式各样的零食,但是因为贪吃,小虾同学体重日益增加,终于被人叫为小胖了,他终于下定决心减肥了,他决定每天晚上去操场跑两圈,但是跑步太累人了,他想转移注意力,忘记痛苦 ...

  5. 《逆袭进大厂》第十五弹之智力情景题 | 个人博客

    卷友们好,我是阿秀. 嗯,智力题&情景题终于来了,这次阿秀不再是鸽秀... 其实真不是我不更,主要是最近事情有点多,最近在忙着个人博客和研究生毕业答辩的事情. 搭这个博客主要是因为不止一个小伙 ...

  6. 【面经_智力情景题_(个人总结】

    其实互联网招聘中,有一类型考察是考察你的临场反应速度,比如脑筋急转弯这种智力题或者情景题 比如很知名的腾讯赛马问题等- 1.三人三鬼过桥 2.赛马找最快的马匹(腾讯高频题) 2.1.25匹马5条跑道找 ...

  7. 【计算思维题】少儿编程 蓝桥杯青少组计算思维题真题及解析第2套

    少儿编程 蓝桥杯青少组计算思维题真题及解析第2套 1.天平的左右两端分别放有一些砝码,如下图所示,右边的砝码不变,从左边最多拿走几个砝码,可以使天平左右两边平衡 A.1 B.2 C.3 D.4 答案: ...

  8. ChatGPT 之父传奇:8岁学编程,16岁出柜,37岁颠覆科技圈,网友:“天选 CEO!”...

    整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 近日,"ChatGPT 月活破亿"冲上热搜!根据 Sensor Tower 数据,TikTok 在全球推 ...

  9. 全国青少年编程等级考试python一级真题2022年3月(含题库答题软件账号)

    对青少年编程等级考试Python真题答题考试系统关注的请点击 全国青少年编程等级考试python一级真题2020年12月(含题库答题软件账号)_程序猿下山的博客-CSDN博客_python编程一级试卷 ...

最新文章

  1. zabbix告警升级的迷惑
  2. 【数字信号处理】序列傅里叶变换 ( 序列傅里叶变换与反变换 | 序列绝对可和 与 存在傅里叶变换之间的关系 | 序列傅里叶变换性质 )
  3. Windows下配置NodeJS环境详解
  4. a*算法的优缺点_K-近邻算法以及案例
  5. 领航服务器系统,应用领航:盘点那些年我们一起追过的OS
  6. 数据库MySQL安装
  7. mysql 二进制日志大小_mysql二进制日志。
  8. 阿里云服务器跟淘宝上租的服务器有什么区别?
  9. mac excel 函数
  10. 信息安全技术--轮转机密码
  11. ctfshow(菜狗杯)
  12. Presto-Hbase 指定worke任务节点操作
  13. 个人技术总结——Unity中角色动画制作及动画切换逻辑的实现
  14. Apache基于域名、端口、IP的虚拟主机配置(Centos 6.5)
  15. 【人工智能项目】机器学习中文垃圾邮件分类任务
  16. win系统修改C盘下user/用户名
  17. Deep Projective 3D Semantic Segmentation
  18. 狂奔与内卷并存,自嗨锅、莫小仙们如何寻找“破局之道”?
  19. 关于大学数学建模一些推荐的软件
  20. 最新版抖音(20200624)去水印原理及源码,简单的原理与面临的挑战

热门文章

  1. 编译duilib遇到问题:Error C2371 IDispatchEx重定义;不同的基类型
  2. 语音识别的基础知识与CMUsphinx介绍
  3. 【我是一棵树】树的概念
  4. 国外别墅后期PS教程洛阳生
  5. 告诉你win10自带录屏怎么使用
  6. 下班后的时间,挖一口属于自己的井
  7. 【Android笔记 七】Android Sensor感应器介绍(三)获取用户移动方向,指南针原理
  8. 关于String 对象的 intern()方法的使用
  9. 看过上百份年终总结报告,我来告诉你怎么做最吸睛
  10. 2019全球人工智能产品应用博览会将于今年5月在苏州举办