Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在线性时间内找到阵列中所有可能子阵列的乘积?_Arrays_Dynamic Programming_Number Theory - Fatal编程技术网

Arrays 如何在线性时间内找到阵列中所有可能子阵列的乘积?

Arrays 如何在线性时间内找到阵列中所有可能子阵列的乘积?,arrays,dynamic-programming,number-theory,Arrays,Dynamic Programming,Number Theory,假设我有一个数组A[4]={5,6,2,4} 子数组是:{5}、{6}、{2}、{4}、{5,6}、{6,2}、{2,4}、{5,6,2}、{6,2,4}、{5,6,2,4}、{5,6,2,4} 我需要包含每个子数组的乘积的数组作为输出,即{5,6,2,4,30,12,8,60,48,240} 这是我的O(n^2)方法: const int a = 4; const int b = 10; //n(n+1)/2 int arr[a] = {5, 6, 2, 4}; int ans[b] = {0

假设我有一个数组A[4]={5,6,2,4}

子数组是:{5}、{6}、{2}、{4}、{5,6}、{6,2}、{2,4}、{5,6,2}、{6,2,4}、{5,6,2,4}、{5,6,2,4}

我需要包含每个子数组的乘积的数组作为输出,即{5,6,2,4,30,12,8,60,48,240}

这是我的O(n^2)方法:

const int a = 4;
const int b = 10; //n(n+1)/2
int arr[a] = {5, 6, 2, 4};
int ans[b] = {0};
int x = 0;
for(int i = 0; i < n; i++) {
  prod = 1;
  for(int j = i; j < n; j++) {
    prod *= arr[j];
    ans[x++] = prod;
  }
}

//ans is the o/p array
const int a=4;
常数int b=10//n(n+1)/2
int-arr[a]={5,6,2,4};
int ans[b]={0};
int x=0;
对于(int i=0;i

我想知道这是否可以在O(n)复杂度中找到?谢谢

不,这是不可能的,因为结果的大小是二次的(n(n+1)/2)。不管计算结果有多容易,仅仅写下结果的每个条目就已经花费了二次时间