【发布时间】:2018-01-16 20:54:20
【问题描述】:
数组 A[] 只包含 '1' 和 '-1'
构造数组B,其中B[i]是从j开始到i结束的最长连续子数组的长度,其中j < i and A[j] + .. + A[i] > 0
明显的 O(n^2) 解决方案是:
for (int i = 0; i < A.size(); ++i) {
j = i-1;
sum = A[i];
B[i] = -1; //index which fills criteria not found
while ( j >=0 ) {
sum += A[j];
if (sum > 0)
B[i] = i - j + 1;
--j;
}
}
我正在寻找 O(n) 的解决方案。
【问题讨论】:
-
我假设您想要算法,而不是 C++ 中的实现?
-
@Phil Moesch 是的……你能说得更具体点吗?
-
@Vaughn Cato 更新
-
子序列是否需要连续?
-
@PhamTrung en.wikipedia.org/wiki/Subsequence 根据定义不需要是连续的。看起来这不是 OP 的意思,应该有人编辑他的帖子以避免混淆。