Algorithm 最接近零[绝对值]实值序列的连续子序列之和

Algorithm 最接近零[绝对值]实值序列的连续子序列之和,algorithm,sequence,dynamic-programming,divide-and-conquer,Algorithm,Sequence,Dynamic Programming,Divide And Conquer,这是我的算法操场!我见过这个问题处理最大连续子序列的变体,但这也是另一个变体。 正式定义: 给定A[1..n]findi和j,使abs(A[i]+A[i+1]+…+A[j])最接近于零 我想知道如何获得O(n log^2n),甚至O(n log n)解决方案 计算累计总和 分类 找到差异最小的序列对 函数最小顺序(值){ var n=值。长度; //将累积和与索引一起存储。 var总和=[]; sums[0]={index:0,sum:0}; 对于(var i=1;我想你是在寻找负数和正数之间的

这是我的算法操场!我见过这个问题处理最大连续子序列的变体,但这也是另一个变体。 正式定义: 给定
A[1..n]
find
i
j
,使
abs(A[i]+A[i+1]+…+A[j])
最接近于零

我想知道如何获得
O(n log^2n)
,甚至
O(n log n)
解决方案

  • 计算累计总和
  • 分类
  • 找到差异最小的序列对
  • 函数最小顺序(值){
    var n=值。长度;
    //将累积和与索引一起存储。
    var总和=[];
    sums[0]={index:0,sum:0};
    
    对于(var i=1;我想你是在寻找负数和正数之间的最小距离,从i=j开始;当我得到答案后,你将它们与从cs站点删除的0进行比较!tanx提到!这是很棒的js代码,所以tanx!有没有其他类似使用AVL树的设计方法?!我听说这是可能的,我是说我很想知道怎么做。我不知道。如果是这样的话,实现起来会更复杂,而且在速度和内存方面也不会给你带来任何好处。
    >>> leastSubsequenceSum([10, -5, 3, -4, 11, -4, 12, 20]);
    [2, 3, 1]
    
    >>> leastSubsequenceSum([5, 6, -1, -9, -2, 16, 19, 1, -4, 9]);
    [0, 4, 1]
    
    >>> leastSubsequenceSum([3, 16, 8, -10, -1, -8, -3, 10, -2, -4]);
    [6, 9, 1]
    
    [10, -5, 3, -4, 11, -4, 12, 20]
             ^^^^^