【发布时间】:2014-09-16 05:05:07
【问题描述】:
我有兴趣找到总和为正值 (sum>0) 的连续子数组的数量。
更正式地说,给定一个整数数组 A[1,...,n] 我希望计算整数对 (i,j) 使得 10.
我熟悉 Kadane 的算法,用于在 O(n) 中找到最大和子数组,并且使用类似的方法我可以在 O(n^2) 中计算这些子数组的数量。
为此,我采用累积总和 T(i)。然后我计算所有 j=1,...,n 和 i=1,...,j 的 T(j)-T(i-1) 并记录最终为正的差异。
显然,尽管有一个 O(n) 时间例程可以将此问题转换为计算反转次数的问题(可以使用归并排序在 O(nlogn) 中实现)。尽我所能,我一直无法找到这种转变。
我确实明白,我必须以某种方式将这种反转与一对 (i,j) 之间的元素之和为正的事实相匹配。
有人对如何执行此操作有任何指导吗?非常感谢任何帮助。
编辑:我实际上是在寻找 O(n) 转换,而不是寻找子数组数量的替代解决方案(不是基于转换加反转计数)。
【问题讨论】: