我们给出阵列与所有一个[ 我] > 0。
现在我们需要找到可以从其子数组中形成多少个不同的总和(其中,子数组是该数组的连续范围,即,对于某些j ,k的,总和是所有子数组的元素)。例如,如果一个= [ 1 ,2 ,1 ],则答案为4:我们可以形成1 ,2 ,3 ,4。
我知道如何计算时间中不同总和的数量。
此外,我已经意识到这与经典问题类似,在经典问题中,我们需要找到字符串的不同子字符串的数量。我正在考虑构造后缀数组并以类似的方式(以时间)解决它的可能性。但是我还无法弄清楚如何对其进行修改以在这里工作。例如,如果我们使用后缀数组为一个= [ 1 ,2 ,1 ],我们将得到5案件代替的四个上可接受的那些。是否可以使用后缀数组来做到这一点,或者我在想错方向吗?
我也一直在思考另一个方向。分而治之。就像我每次将数组分为两部分,直到将其简化为单个元素一样。一个元素可以有一个总和。现在,如果我们组合两个单个元素,则可以通过两种方式完成:如果两个单个范围具有相同的元素,那么我们将获得2个不同的和,或者如果两个具有不同的元素,我们将获得3个不同的和。但是对于合并长度大于1的数组,我无法一概而论。是否可以合并两个m个大小的数组,并以得出答案?
我建议从以下问题开始:决定两个间隔的和是否相同有多难?试图证明此问题的3SUM难度很诱人,但到目前为止,我还没有能够做到。
—
Yuval Filmus 2014年