更改数组,使数组中的最大元素必须是最小元素

To change an array such that maximum element in an array must be minimum

本文关键字:元素 数组      更新时间:2023-10-16

我有一个数组[4,7,1,3,6,5],我需要对它进行变换,使变换后的数组中的最大元素必须是最小元素。

对于上面的例子,在不改变数组的总和值的情况下,数组可以转换为[4,4,4,4,5,5],因此答案将是5(最大元素是最小元素)。

可以在不改变数组的总和的情况下,对数组的一个元素增加或减少任何值。

为清楚起见,另一个例子:

给定数组[4,1,0],我们可以将其修改为[2,1,2],使最大元素的最小值为2。

算法:

1: Sum all numbers (26)

2:将总和除以元素总数(26/6),然后四舍五入到最接近的最小整数(4)

3:开始将这个整数添加到一个新的数组中,直到数组的其余部分无法仅用4填充为止,然后开始添加5(下一个整数)

// Don'f forget #include <cmath> or <math.h>
int arr[], int N;
int answer[N];
int sum = 0;
for(int i = 0; i < N; i++) sum += arr[i];
int num = floor(sum / (double)N);
for(int i = 0; i < N; i++)
{
    if (sum == (N - i) * (num + 1)) answer[i] = num + 1;
    else answer[i] = num;
    sum -= answer[i];
}