2 抽象
将一个包含m个整数的数组分成n个数组,每个数组的和尽量接近
3 思路
这个问题是典型的动态规划的问题,理论上是无法找到最优解的,但是本次只是为了解决实际生产中的问题,而不是要AC,所以我们只需要找到一个相对合理的算法...如果第一个数大于等于avg,将这个数单独作为一组,因为再加下一个数也不会使得求和更接近avg;然后将剩下的数重新求平均,表示需要让剩下的数分配得更加平均,这样可以避免极值的影响,然后重新开始下一轮计算...如果第一个数num小于avg,我们将这个数加入到数组中,然后我们需要找到一(或若干)个数,使得其和更接近delta = avg-num,
继续遍历数组,若发现某个数k==delta,将k加入到数组,结束本轮寻找...我们举一个栗子:
数组为:500, 18, 28, 2, 27, 35, 22, 10, 6, 5, 3, 2, 1;分为4组
排序为:500, 35, 28, 27, 22, 18, 10, 6, 5...加入到第三组,结束第三轮,属于数组为 27, 10, 6, 5, 2, 2, 1
第四轮:直接返回剩下数加入到一个组作为第四组
结果:
arr 0 is : 500, sum = 500
arr 1