有一个长度为 n 的数组n 是 10 的倍数每个数 ai 都是区间 0 9 中的 整数。小明发现数组里每种数出现的次数不太平均而更改第 i 个数的代价为 bi他想更改若干个数的值使得这 10 种数出现的次数相等都等于 n10 请问 代价和最少为多少
首先统计每种数出现的次数,如果已经平均了,那么无需更改,代价为0。否则,可以先将多余的数替换成少的数,这样代价最小。比如说,如果 0 出现了较多的次数,那么可以将一些 0 替换成其他数,使得每种数出现的次数尽可能接近 n/10。可以将每种数出现的次数与 n/10 的差值构成一个新的数组 diff,其中正数表示该数出现的次数过多,负数表示该数出现的次数过少。接下来,对这个数组进行排序,将差值最大的数(即需要更改的次数最多的数)替换成出现次数最少的数,直到所有数出现的次数都相等。替换第 i 个数的代价为 bi,因此需要计算所有替换操作的总代价。总代价即为 diff 数组中所有正数的绝对值之和。
原文地址: https://www.cveoy.top/t/topic/bLOu 著作权归作者所有。请勿转载和采集!