Skip to content

Commit 6981425

Browse files
authored
Update Readme.md
1 parent 2631ef2 commit 6981425

File tree

1 file changed

+7
-0
lines changed
  • Binary_Search/1648.Sell-Diminishing-Valued-Colored-Balls

1 file changed

+7
-0
lines changed

Binary_Search/1648.Sell-Diminishing-Valued-Colored-Balls/Readme.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@
1616
这里有一个比较关键的地方,就是总球数达到orders的时候,我们必须停下来。在哪个回合的哪一轮停下来,“零头”是多少,需要好好处理。从上述可知,在第i回合中,每轮可以取i+1个球,可知需要进行```q = orders/(i+1)```轮,剩下的零头```r = orders%(i+1)```个球对应的分数就是```inventory[i]-q```.
1717

1818
另一个注意的点是,对于```10 10 8....```这种情况,根据上述的算法,第一回合其实不用做任何操作,因为第一和第二的颜色数目相同。在第二回合的操作里直接一并取两个球。
19+
20+
#### 解法2:二分搜值
21+
因为每轮我们所取的球的分值都是递减1的,我们可以尝试猜测最后一整轮的球的分值是k,另外可能还有一些零头的球它们的分值是k-1. 我们需要寻找最大的k,使得分值大于等于k的球的总数不超过orders。
22+
23+
对于任何一种颜色inventory[i],如果inventory[i]>=k,那么它必然能贡献inventory[i]-k+1个球,其中最大分数是inventory[i],最小分数是k。扫描一遍整个数组,我们就能把总球数求出来,与orders比较一下。如果大于orders,说明取的球太多了,k要提升一下。反之,k就要下降一点。
24+
25+
确定了k之后,我们还要手工计算一下零头的数量是多少,他们每个球贡献的分数是k-1.

0 commit comments

Comments
 (0)