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

Pick M elements from array such that maximum of all is minimum

给定一个 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

首先,没有标准的算法可以用于你的问题,所以 我会解释解决这个问题的方法。

问题需要 你找到修改数组,这样你就可以获得最小值 可能经常 "max boxes"。这里的关键是找到 你的数组的最大值,每次都从中提取一个球,在 同时,将 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]

如果您还有什么问题,欢迎随时 问!我还可以为您提供完整的工作算法,但您 应该先尝试自己创建它!