【发布时间】:2017-06-30 12:58:03
【问题描述】:
我想在一个数组中生成所有可能的子数组。我尝试了一个复杂度为 O(n^2) 的算法。
for(i=1;i<=N;++i){
if(S[i]==k)
return 1;
x=S[i];
for(j=i+1;j<=N;++j){
x^=S[j];
if(x==k)
return 1;
}
}
【问题讨论】:
-
在一个大小为 n 的数组中有 n^2 个可能的子数组。您不能在小于 O(n^2) 的时间内生成大小为 n^2 的输出。
-
更不用说复制每个数组所需的 O(n) 时间
-
@spug:实际上,如果您安排您的子阵列由原始阵列支持 - 例如,这可以治愈。
subList-s 是 Java 中的ArrayList,C 中的(指针、长度)对。