我有一个数组[4,7,1,3,6,5]
,我需要对其进行转换,以使该转换后的数组中的最大元素必须是最小的。
所以对于上面的例子,在不改变该数组的总和值的情况下,可以将数组转换为[4,4,4,4,5,5]
所以答案将为 5(最大元素是最小的)。
我们可以在不改变总和的情况下将数组的元素增加或减少任意值。
为清楚起见,另一个示例:
给定数组[4,1,0]
,我们可以修改它,[2,1,2]
使得最小的最大元素为 2。
算法:
1:对所有数字求和 (26)
2:将总和除以元素总数 (26 / 6),然后将数字四舍五入到最接近的小整数 (4)
3:开始将此整数添加到新数组中,直到无法仅用四位填充数组的其余部分,然后开始添加五位(下一个整数)
// 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];
}