AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3302. 开放日活动

中等通过率 40% · 提交 1,520 · 通过 612
二分查找模拟

小慕正在策划部门的 Family Day 开放日活动,其中有一个从桶里取球的游戏。游戏规则如下:有 N 个容量相同的小桶等距排开,每个小桶里默认装了数量不等的小球,小桶里的小球数量记录在数组 bucketBallNums 中。游戏开始时,要求所有桶里的小球总数不能超过 SUM。如果小球总数超过 SUM,则需要为所有小桶统一设置一个 maxCapacity,并将超过该容量最大值的小球从桶中取出,直到每个小桶里的小球数量都不大于 maxCapacity。 请你根据输入的数据,计算出尽可能大的容量最大值 maxCapacity,并输出。 限制规则一 如果所有小桶的小球总数小于 SUM,则无需设置容量值,也无需从小桶中拿球,返回结果 []。 限制规则二 如果所有小桶的小球总数大于 SUM,则需要设置一个尽可能大的容量最大值 maxCapacity,并且需要从小桶中拿球,返回从每个小桶拿出的小球数量组成的数组。

提示:带虚线的词点一下有通俗解释。

输入描述

<p> 第一行输入2个正整数,数字之间使用空格隔开,其中第一个数字表示SUM,第二个数字表示bucketBallNums数组长度; </p> <p> 第二行输入N个正整数,数字之间使用空格隔开,表示bucketBallNums的每一项。 </p>

输出描述

<div data-page-id="Q9ILdheU6ompXdxmneucN3cLnog" data-docx-has-block-data="false"> <div style="white-space-collapse:preserve;" class="ace-line ace-line old-record-id-FIUWdhQlfo08uUxIQHBcFVYIn7f"> 一个数组,表示<span style="color:rgba(0, 0, 0, 0.87);font-family:"font-size:14px;white-space:pre-wrap;background-color:#FFFFFF;">从每个小桶里拿出的小球数量。</span> </div> </div> <span data-lark-record-data="{"rootId":"Q9ILdheU6ompXdxmneucN3cLnog","text":{"initialAttributedTexts":{"text":{"0":"一个数组。"},"attribs":{"0":"*0+5"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":69,"type":"text","selection":{"start":0,"end":5},"recordId":"FIUWdhQlfo08uUxIQHBcFVYIn7f"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>

示例

示例 1

输入

14 7
2 3 2 5 5 1 4

输出

[0, 1, 0, 3, 3, 0, 2]

说明:小球总数为22,SUM = 14,超出范围了,需从小桶取球。 - maxCapacity = 1,取出球后,1 1 1 1 1 1 1, 桶里剩余小球总和为7,远小于14 - maxCapacity = 2,取出球后,2 2 2 2 2 1 2,桶里剩余小球总和为13,小于14 - maxCapacity = 3,取出球后,2 3 2 3 3 1 3,桶里剩余小球总和为16,大于14 因此选择maxCapacity为2 ,每个小桶小球数量大于 2 的都需要拿出来。

示例 2

输入

3 3
1 2 3

输出

[0, 1, 2]

说明:小球总数为6,SUM = 3,超出范围了,需从小桶取球。 取maxCapacity = 1,则小球总数为 3,从 0 号桶取出 0 个球,从 1 号桶取出 1 个球,从 2 号桶取出 2 个球。故输出[0, 1, 2]。

示例 3

输入

6 2
3 2

输出

[]

说明:小球总数为5,SUM = 6,无需从小桶取球;

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
双机位A/C - 开放日活动 图解 原始桶内小球数: 2 3 2 5 5 1 4 设置 maxCapacity = 2: 2 2 2 2 2 1 2 拿出的球: 0 1 0 3 3 0 2 剩余小球总数 = 2+2+2+2+2+1+2 = 13 ≤ 14 (SUM)
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「开放日活动」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。