#OD041. 取出尽量少的球
取出尽量少的球
题目解析和算法源码
华为OD机试 - 取出尽量少的球(Java & JS & Python & C & C++)_伏城之外的博客-CSDN博客
题目描述
某部门开展 Family Day
开放日活动,其中有个从桶里取球的游戏,游戏规则如下:
有 N
个容量一样的小桶等距排开,且每个小桶都默认装了数量不等的小球,每个小桶装的小球数量记录在数组 bucketBallNums
中,
游戏开始时,要求所有桶的小球总数不能超过 SUM
,如果小球总数超过 SUM
,则需对所有的小桶统一设置一个容量最大值 maxCapacity
,并需将超过容量最大值的小球拿出来,直至小桶里的小球数量小于 maxCapacity
。
请您根据输入的数据,计算从每个小桶里拿出的小球数量?
- 限制规则一:所有小桶的小球总和小于
SUM
,则无需设置容量值maxCapacity
,并且无需从小桶中拿球出来,返回结果[]
- 限制规则二:如果所有小桶的小球总和大于
SUM
,则需设置容量最大值maxCapacity
,并且需从小桶中拿球出来,返回从每个小桶拿出的小球数量组成的数组
输入描述
第一行输入 2
个正整数,数字之间使用空格隔开,其中:
- 第一个数字表示
SUM
- 第二个数字表示
bucketBallNums
数组长度
第二行输入 N
个正整数,数字之间使用空格隔开,表示 bucketBallNums
的每一项
输出描述
从每个小桶里拿出的小球数量,并使用一维数组表示
备注
- 1 ≤ bucketBallNums[i] ≤ 10^9
- 1 ≤ bucketBallNums.length = N ≤ 10^5
- 1 ≤ maxCapacity ≤ 10^9
- 1 ≤ SUM ≤ 10^9
用例1
输入
14 7
2 3 2 5 5 1 4
输出
[0,1,0,3,3,0,2]
说明
小球总数为
22
,SUM
=14
,超出范围了,需从小桶取球,
maxCapacity
=1
,取出球后,桶里剩余小球总和为7
,远小于14
maxCapacity
=2
,取出球后,桶里剩余小球总和为13
,
maxCapacity
=3
,取出球后,桶里剩余小球总和为16
,大于14
因此
maxCapacity
为2
,每个小桶小球数量大于2
的都需要拿出来;
用例2
输入
3 3
1 2 3
输出
[0,1,2]
说明
小球总数为
6
,SUM
=3
,超出范围了,需从小桶中取球,maxCapacity
=1
,则小球总数为3
,从1
号桶取0
个球,2
号桶取1
个球,3
号桶取2
个球;
用例3
输入
6 2
3 2
输出
[]
说明
小球总数为
5
,SUM
=6
,在范围内,无需从小桶取球;