Java算法题,取出尽量少的球
` 描述:例如:有N个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球,每个小桶装的小球数量记录在数组 bucketBallNums 中,游戏开始时,要求所有桶的小球总数不能超过SUM,如果小球总数超过SUM,则需对所有的小桶统一设置一个容量,并需将超过容量最大值的小球拿出来,直至小桶里的小球数量小于 maxCapacity。请您根据输入的数据,计算从每个小桶里拿出的小球数量。
限制规则一:
所有小桶的小球总和小于SUM,则无需设置容量值maxCapacity,并且无需从小桶中拿球出来,返回结果[]
限制规则二:
如果所有小桶的小球总和大于SUM,则需设置容量最大值maxCapacity,并且需从小桶中拿球出来,返回从每个小桶拿出的小球数量组成的数组。
输入描述:
第一行输入2个正整数,数字之间使用空格隔开,其中第一个数字表示SUM,第二个数字表示bucketBallNums数组长度; 第二行输入N个正整数,数字之间使用空格隔开,表示bucketBallNums的每一项;
输出描述:
找到一个maxCapacity,来保证取出尽量少的球,并返回从每个小桶拿出的小球数量组成的数组。
示例
输入
33 8
6 5 4 6 3 2 4 5
输出
[1,0,0,1,0,0,0,0]
说明:
小球目标总数为33,数组长度为8,如果数组的元素总和35,要大于33,则需要取出小球。
maxCapacity=1,球桶最大可以容纳球数为8,要取出27个,球桶剩余8个;
maxCapacity=2,球桶最大可以容纳球数为16,要取出19个,球桶剩余16个;
maxCapacity=3,球桶最大可以容纳球数为24,要取出12个,球桶剩余23个;
maxCapacity=4,球桶最大可以容纳球数为32,要取出6个,球桶剩余29个;
maxCapacity=5,球桶最大可以容纳球数为40,要取出2个,球桶剩余33个。
解题思路
已知sum和bucketBallNums,如果数组元素(球桶)的总和大于目标值sum,则要从中取出小球。
每个桶都是一个容器,我们要计算这个容器储存的最大值,即maxCapacity。
int maxCapacity = sum / bucketBallNums.length; 向上取整得到每个容器的最大上限。
代码如下:
public static void main(String[] args)