1760. 袋子里最少数目的球
Posted 不吐西瓜籽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1760. 袋子里最少数目的球相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。
说明
一、题目
你的开销是单个袋子里球数目的 最大值 ,你想要 最小化 开销。
二、分析
- 题目的意思就是在限定的拆分下得到整个数组中的最大值, 而这个最大值要尽可能的小.
- 拆分之后的值是一个正整数, 也就意味着这个最优值肯定在
1 - max
之间, 只需要从小到大遍历这个区间值, 然后针对每个值进行拆分, 并且最终的操作数都满足限定条件, 这样不就可以拿到最优的拆分了. - 这里也可以采用二分来快速的迭代错误的答案.
class Solution {
public int minimumSize(int[] nums, int target) {
int l = 1, r = -1, mid;
for(int i : nums) r = Math.max(r, i);
while(l <= r) {
mid = (l + r) >> 1;
if(check(nums, mid) <= target) r = mid - 1;
else l = mid + 1;
}
return l;
}
public int check(int[] nums, int target) {
int ret = 0;
for(int i : nums) {
ret += i / target - 1;
ret += i % target == 0 ? 0 : 1;
}
return ret;
}
}
总结
熟悉二分的遍历方法。
以上是关于1760. 袋子里最少数目的球的主要内容,如果未能解决你的问题,请参考以下文章