js数组拆分问题
let arrs=[102,233,45,350,130,220,195,240]
我想让arrs拆分出两组,但是想让拆分出的两组数组之和的值尽可能相近,差值越小越好,我自己想法是重新sort,按照从小到大,然后判断下标分出两组,奇数一组,偶数一组,或者前两个最小值和后两个最大值为一组,中间四个为一组.
大家有没有更好精确的方法,能取出最小差值.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
嗨,可以这么想:
两个集合和差值越小,说明两者越接近总和的一半。
问题即可转化为 0-1 背包问题,可求和小的子集合也可求和大的子集合,最后回溯打印路径。
如求和较小的,状态转移方程为:
f[i][v] = max( f[i-1][v], f[i-1][v-nums[i]] + nums[i] )
当然,如果这么用数组 dp 的话就限制了和最大值要在 2^32 以内,可以根据数字最小值压缩 dp 数组。
把数组中所有元素求和,除以二
用这个值解一个
背包问题子集和问题(Subset sum problem)“笨”方法
补充一个背包的解法,支持一下@冯恒智
此题无解,再寽寽你的需求吧。