We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 2631ef2 commit 6981425Copy full SHA for 6981425
Binary_Search/1648.Sell-Diminishing-Valued-Colored-Balls/Readme.md
@@ -16,3 +16,10 @@
16
这里有一个比较关键的地方,就是总球数达到orders的时候,我们必须停下来。在哪个回合的哪一轮停下来,“零头”是多少,需要好好处理。从上述可知,在第i回合中,每轮可以取i+1个球,可知需要进行```q = orders/(i+1)```轮,剩下的零头```r = orders%(i+1)```个球对应的分数就是```inventory[i]-q```.
17
18
另一个注意的点是,对于```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