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

📅 发布时间:2026/7/13 13:50:57 👁️ 浏览次数:
D.二分查找-二分答案-最小化最大值——1760. 袋子里最少数目的球
题目链接1760. 袋子里最少数目的球中等算法原理解法二分查找25ms击败94.70%时间复杂度O(Nlogn)①目标变量开销②目标条件经过最多maxOperations次操作使得袋子开销最小③转换逻辑经过最多maxOperations次操作后能否让所有袋子的球都≤mid具体步骤①确定边界left1题目保证了至少有1个球因此至少需要1个开销right数组中的最大值不经过任何操作时数组中最大值作为开销能够装下任一袋子的球②确定二分模型开销 ↑ 操作次数 ↓ 呈负相关单调由于要让开销尽量小因此采用最左端点模型③check方法设计判断经过最多maxOperations次操作后能否让所有袋子的球都≤mid只需要知道每个袋子中的球要经过多少次操作能让球数≤mid那么对应操作次数rx/mid由于当求数为mid时无需再进行操作了因此我们需要向下取整最终式子为r(x-1)/mid在累计操作次数时如果发现已经超过了最大操作次数了那么肯定无法让所有袋子的球都≤mid直接返回false否则就在最后判断根据r≤m进行返回Java代码class Solution { public int minimumSize(int[] nums, int m) { int left1,right0; for(int x:nums) rightMath.max(right,x); while(leftright){ int midleft(right-left)/2; if(!check(mid,nums,m)) leftmid1; else rightmid; } return left; } //判断经过最多maxOperations次操作后能否让所有袋子的球都≤mid private boolean check(int mid,int[] nums,int m){ long r0;//累计操作次数 for(int x:nums){ //对每个袋子x计算需要的操作次数累加 r(x-1)/mid; //次数超过m直接返回false if(rm) return false; } //总操作次数≤m说明mid可行 return rm; } }