如何有效地查找数组的所有可能子数组?

ras*_*dcs 5 arrays data-structures

假设我得到了一个数组;A[] = {1,2,3}我想找到这个数组的所有子数组。答案应该是

{1}
{1,2}
{1,2,3}
{2}
{2,3}
{3}
Run Code Online (Sandbox Code Playgroud)

如何有效地找到数组的所有可能子数组?

Ank*_*cha 6

数组 A 的子数组,A[i..j]其中0 <= i <= j < nn 是数组的长度。

在C语言中可以这样计算:

#include <stdio.h>

int main(){
    int A[] = {1,2,3,4,5};
    int len=sizeof(A)/sizeof(int);
    for( int i=0; i<len; i++ ){
        for( int j=i; j<len; j++ ){   // Now A[i..j] is the subarray
            for( int k=i; k<=j; k++ )
                printf("%d ", A[k]);
            printf("\n");
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的时间复杂度为“O(n^3)”。这是最有效的方法吗?我认为散列将是一种更合适的方法,因为问题是“有效地”找到子数组。 (3认同)
  • 这种方法的时间复杂度为o(n)3,并不是一种有效的方法。 (2认同)