我想要求FAST方法为给定数组找到连续的子数组。请注意,我不是在寻找最大和的连续子阵列,而是希望对获得的子阵列执行其他操作。我已经知道以下算法,但我正在寻找更有效的算法,因为这个算法的时间复杂度非常差。
// N = number of elements in array A.
void subarr(int N, int A[]) {
for (int i = 0; i < N; i++) {
for (int j = i; j < N; j++) {
for (int k = j; k < N; k++) {
cout << A[k] << ' ';
}
cout << endl;
}
}
}
答案 0 :(得分:0)
正如其他人在评论中指出的那样,你的例子是不正确的。它应该读作像
for (int i = 0; i < N; i++) {
for (int j = N-1; j >= i; j--) {
for (int k=i; k<=j; k++) {
cout << "A[" << k << "] ";
}
cout << endl;
}
}
请注意,我将输出更改为仅按字面A[k]
打印。这将打印每个子阵列一次。
至于你的问题,正如其他人所指出的那样,这个算法打印每个子阵列一次,没有任何额外的工作。我不相信你可以节省运行时间,因为这几乎是你必须做的最少量的工作。你确实从三个嵌套循环中获得了一些开销,但你可能需要全部三个:例如,一个子数组由
指定你必须打印/删除其间的内容,从而产生第三个循环。