查找连续的子数组(没有和)
Finding contiguous subarray (without sum)
我想要求为给定数组查找连续子数组的快速方法。请注意,我不是在寻找最大和连续子数组,而是想对获得的子数组执行其他操作。我已经知道下面的算法,但我正在寻找更有效的算法,因为这一个有一个非常差的时间复杂度。
// 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;
}
}
}
正如其他人在评论中指出的那样,你的例子是不正确的。它应该读起来像
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]
。这将只打印每一个子数组一次。
至于你的问题,再一次,正如其他人指出的,这个算法打印每个子数组一次,没有任何额外的工作。我不相信您可以省去运行时,因为这几乎是您必须做的最少的工作。这三个嵌套循环确实有一些开销,但您可能需要全部三个循环:例如,用
指定子数组- 其起始点
- 其终点或长度
,你必须打印/剪切中间的内容,从而产生第三个循环。
相关文章:
- 可以将两个相同类型的连续数组视为一个数组吗?
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 查找连续子数组的第二小和
- 二进制数组中最大连续 1 的起始和结束索引,以 C++ 为单位
- std::array与C样式数组用于连续内存
- 在 Cython 中创建一个连续数组并将其传递给C++
- 在内存中连续分配的多维数组的实现
- 非重叠连续子数组的最大长度总和
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- 如何从数组中删除 2 个连续重复项? C++
- C++ 如何找出数组中最多的连续数字?
- 在随机生成的数组中查找重复的连续数字
- 子数组中两个数字的相同出现(连续)
- 连续字符串输入的C 动态数组
- 查找给定数组中长度为 k 的所有连续子数组的总和
- 调整小于连续数组的 C++ 矢量大小
- 如何在C++中动态分配连续的二维数组?
- 我如何连续地找到“占领”C 数组中的元素
- 一个非常大的数组(连续内存块)