假设有一个长度为N长度的数组,值是任意自然数,可能存在重复
现在要求把这个数组进行分组,使每组的和都等于M,当取不到等于M的时候,取接近M(取绝对值),不可重复分配.
分配的数组长度可能一不一样,
如下面的例子
要分配的数组 {1,2,2,3,4,5,5,6,6,7,8}
分成每组的和为10
结果{8,2},{7.3},{6,4}{5,5},{6,2,1} 这样可以
{1,2,7},{2,8},{4,6},{5,5},{6.3} 这样也可以
当然有的时候组合有很多种, 取一种就可以了
1、先进行合计
2、合计数除以M,得到分组数K。
3、对数组进行排序。
4、从大数开始取,然后找到一个数字加起来最接近M的。
5、如果只是接近,继续找看能否还有数字加起来能等于M的。
6、等于跳出,找不到这一组也算结束了。
(4、5、6这边还要再仔细考虑一下,这样可能出现不是最优结果)
其他就好办了。
还有另外一种思路,
4、从大数开始,往K个盒子里面扔数字,一次只扔一个。
5、逐个检查盒子合计数,再来第二轮
6、直到所有数字扔完。
因为可能出现不完全相等的结果,我估计这个题目呢不要求最优解。
只要求计算速度或是解题思路。
我的解题思路,
1.排序
2.从最大数max开始取,然后M-max=R,
3.如果R<=0,当前数就是一组,进入下一个max的组合筛选.
4.如果R>0,取剩余数字<=R的部分,如果没有,直接跳出.找到再次排序,取最大数max1,
5.如果max+max1=M,组合完毕,跳出.如果max+max1<M 进入第4步继续往下找.
6,上面的一轮筛选后,可组合的数字已经都找出来组合了,剩余的数字都是没法组合的了
7.剩余数组重复2 3 4 5 ,因为不会有等于M的组合了, 所以第4步的时候没有找到的时候就直接是一个组合了
这样虽然也分组了 ,但是在没法组合的数字里,最后都是求的小于接近M值, 没有大于接近M值得数组.
求高人指点,思路是否正确, 有没有办法求到接近M绝对值的组合的方法.
还有,我这种方式是先取可以组合的, 在取剩余的, 有没有更好的方式.
还有我的这个解题思路是否正确!