通常我们做的是1.我们从左边开始计算整个数组的和,并称之为Leftsum。2.然后我们从右端开始遍历数组,并开始将每个元素添加到RIGHTSUM中,并从LEFTSUM中减去每个元素。3.直到LEFTSUM=RIGHTSUM,然后我们将迭代器变量i的当前值赋给拆分点4。现在在splitpoint index之前的数组和从SPLITPOINT index到end的数组具有相等的sum
主要问题->
但是如果array是( (3,5,10),( 3,10,5)),而不是(3,5,5,3,10,10),这将起作用,因为我们在这里找不到左右数组和相等的SPLITPOINT
第二部分的答案也应该是(3,5,10) (5,3,10),2个部分的总和应该等于而不是长度这是上面的一个简单的幻觉示例
发布于 2019-11-28 17:54:54
假设整个序列的总和是N。您实际上是在寻找一个和为N/2的子序列。(注意:如果N是奇数,则没有这样的子序列!)
这就是“子集和”问题。在Finding all possible combinations of numbers to reach a given sum上有一个很好的Java解决方案。
https://stackoverflow.com/questions/59085481
复制相似问题