当前位置: 首页 > news >正文

D.二分查找-二分答案-最小化最大值——1760. 袋子里最少数目的球

题目链接:1760. 袋子里最少数目的球(中等)

算法原理:

解法:二分查找

25ms击败94.70%

时间复杂度O(Nlogn)

①目标变量:开销

②目标条件:经过最多maxOperations次操作使得袋子开销最小

③转换逻辑:经过最多maxOperations次操作后,能否让所有袋子的球都≤mid

具体步骤:

①确定边界:

left:1,题目保证了至少有1个球,因此至少需要1个开销

right:数组中的最大值,不经过任何操作时,数组中最大值作为开销能够装下任一袋子的球

②确定二分模型:

开销 ↑ 操作次数 ↓ 呈负相关单调,由于要让开销尽量小,因此采用最左端点模型

③check方法设计:判断经过最多maxOperations次操作后,能否让所有袋子的球都≤mid,只需要知道每个袋子中的球要经过多少次操作能让球数≤mid,那么对应操作次数r=x/mid,由于当求数为mid时无需再进行操作了,因此我们需要向下取整,最终式子为r=(x-1)/mid,在累计操作次数时,如果发现已经超过了最大操作次数了,那么肯定无法让所有袋子的球都≤mid,直接返回false,否则就在最后判断,根据r≤m进行返回

Java代码:

class Solution { public int minimumSize(int[] nums, int m) { int left=1,right=0; for(int x:nums) right=Math.max(right,x); while(left<right){ int mid=left+(right-left)/2; if(!check(mid,nums,m)) left=mid+1; else right=mid; } return left; } //判断经过最多maxOperations次操作后,能否让所有袋子的球都≤mid private boolean check(int mid,int[] nums,int m){ long r=0;//累计操作次数 for(int x:nums){ //对每个袋子x,计算需要的操作次数累加 r+=(x-1)/mid; //次数超过m,直接返回false if(r>m) return false; } //总操作次数≤m,说明mid可行 return r<=m; } }
http://www.jsqmd.com/news/385244/

相关文章:

  • [git start]
  • 非结构化数据处理的容错机制设计
  • HDFS 与 MapReduce 的完美结合:大数据处理的核心技术
  • 题解:洛谷 P9389 [THUPC 2023 决赛] 烂柯杯
  • 数据科学中的图计算:Neo4j和GraphX应用解析
  • Using Jamfiles and Jambase
  • 爬虫数据清洗:Pandas 处理缺失值与异常
  • 实用指南:[linux仓库]线程池[线程玖]
  • 爬虫结果存入 MySQL:批量插入优化
  • [嵌入式系统-215]:线性电源与开关电源各自的工作原理,通俗易懂
  • nodejs+vue3的玉米病虫害远程咨询系统的 小程序
  • [嵌入式系统-214]:线性电源与开关电源
  • nodejs+vue3的社区儿童玩具交易系统
  • nodejs+vue3的社区外来人员登记管理系统 流动人口管理系统
  • nodejs+vue3的旅游民宿预定管理系统的设计与实现
  • nodejs+vue3的校园服务平台的设计与实现
  • nodejs+vue3的企业固定资产管理系统
  • nodejs+vue3的地方扶贫管理系统
  • 集体好奇心推动团队的创新驱动
  • 大数据领域Kafka的消息堆积问题解决
  • 从线性模型到S型曲线:广告投入与销售增长关系的系统建模
  • 【linux项目】2-9 k8s集群rancher界面的搭建以及本地habor镜像仓库的部署深度解析:原理、实战与踩坑记录
  • 加入L-Tester开源任务:自动化测试平台
  • nodejs+vue3的社区桶装饮用水预购管理系统的设计与实现
  • nodejs+vue3的社区电动车充电预约管理系统的设计与实现
  • 浅谈大数据领域主数据管理的重要性和价值
  • Springboot3+vue3微信小程序的计算机软考模拟系统的设计与实现
  • 2026中专大数据管理与应用专业学数据分析的技术价值分析
  • 2026大专计算机专业学生学数据分析的实用性分析
  • HDU.3991 Harry Potter and the Present II