1 背景
ClickHouse集群缩容,为保证数据不丢失,计划将需要缩容的节点上的数据,迁移到其他节点上,保证迁移到每个机器上的数据量尽量均衡。...数据的迁移已partition为单位,已知每个partition的数据量。...2 抽象
将一个包含m个整数的数组分成n个数组,每个数组的和尽量接近
3 思路
这个问题是典型的动态规划的问题,理论上是无法找到最优解的,但是本次只是为了解决实际生产中的问题,而不是要AC,所以我们只需要找到一个相对合理的算法...我们举一个栗子:
数组为:500, 18, 28, 2, 27, 35, 22, 10, 6, 5, 3, 2, 1;分为4组
排序为:500, 35, 28, 27, 22, 18, 10, 6, 5...n个数组,每个数组的和尽量接近
func GetAvgArr(numberList []int64, arrNum int) [][]int64 {
avgArrays := make([][]int64