从数组中选择M个元素,使得所有元素中的最大值为最小值

时间:2018-10-08 19:36:49

标签: algorithm binary-search

给出一组A的盒子,使得每个盒子中都包含一些球 ith盒子中有A[i]个球。我们必须从任何盒子中挑出M个球,以使所有盒子中的最大球数最小。

例如A = [1,9,3,7,5,6,4,8,2]M = 6 比我们将选择的3 balls from 2nd box2 balls from 8th box1 ball from 4th box
最后的数组看起来像A = [1,6,3,6,5,6,4,6,2]

我应该使用哪种算法?

1 < A[i] < 1e9
1 < M < 1e18

1 个答案:

答案 0 :(得分:0)

首先,没有标准算法可用于您的问题,因此  我将解释应解决的方法。

问题需要  您可以找到修改数组,以便获得最小的  “最大包装箱”的可能数量。这里的关键是找到  最大化阵列并每次从中提取一个球  同时,将M降低1。  M!= 0。使用您的示例,步骤将如下所示:

A = [1,9,3,7,5,6,4,8,2]
A = [1,8,3,7,5,6,4,8,2]
A = [1,7,3,7,5,6,4,8,2]
A = [1,7,3,7,5,6,4,7,2]
A = [1,6,3,7,5,6,4,7,2]
A = [1,6,3,6,5,6,4,7,2]
A = [1,6,3,6,5,6,4,6,2]

如果您还有其他疑问,请随时  问!我也可以为您提供完整的算法,但是您  应该先尝试自己创建它!