给定一个数字数组,返回所有其他数字的乘积数组(无除法)

多基因润滑剂

在工作面试中有人问我这个问题,我想知道其他人会如何解决。我对Java最满意,但是欢迎使用其他语言的解决方案。

给定一个数字数组nums,则返回一个数字数组products,其中products[i]是all的乘积nums[j], j != i

Input : [1, 2, 3, 4, 5]
Output: [(2*3*4*5), (1*3*4*5), (1*2*4*5), (1*2*3*5), (1*2*3*4)]
      = [120, 60, 40, 30, 24]

您必须在O(N)不使用除法的情况下进行操作。

迈克尔·安德森

多基因润滑剂方法的解释是:诀窍是构造数组(对于4个元素而言)

{              1,         a[0],    a[0]*a[1],    a[0]*a[1]*a[2],  }
{ a[1]*a[2]*a[3],    a[2]*a[3],         a[3],                 1,  }

两者都可以通过分别从左边缘和右边缘开始在O(n)中完成。

然后将两个数组元素相乘得到所需的结果

我的代码如下所示:

int a[N] // This is the input
int products_below[N];
p=1;
for(int i=0;i<N;++i) {
  products_below[i]=p;
  p*=a[i];
}

int products_above[N];
p=1;
for(int i=N-1;i>=0;--i) {
  products_above[i]=p;
  p*=a[i];
}

int products[N]; // This is the result
for(int i=0;i<N;++i) {
  products[i]=products_below[i]*products_above[i];
}

如果您也需要在空间上设为O(1),则可以这样做(恕我直言,恕我直言)

int a[N] // This is the input
int products[N];

// Get the products below the current index
p=1;
for(int i=0;i<N;++i) {
  products[i]=p;
  p*=a[i];
}

// Get the products above the curent index
p=1;
for(int i=N-1;i>=0;--i) {
  products[i]*=p;
  p*=a[i];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从数字数组中获取一个数字

Java将数组分为2个其他数组,一个数组的所有数字都大于一个值,而另一个数组的所有下面

给定数字N和数组A。检查N是否可以表示为一个或多个数组元素的乘积

创建一个数字数组,这些数字在给定长度下加起来为1

输入一个数字并返回1和该数字之间所有偶数整数的乘积

将一个数字加到存储在数字数组中的数字

算法:给定一个数字数组A,创建一个数组B,其中B [i] = sum(A [j]:A [j] <= A [i])

一个数字数组,一个逻辑数组。如果逻辑== 1,则使用数字值;如果逻辑== 0,则不返回任何值

JavaScript:如何创建一个函数来接收一个数字数组并返回一个只包含正数的数组?

删除数组中另一个数组中的所有数字

Keras可以不加一个数字数组而产生一个标量吗?

获取可变深度数组中的第一个数字数组

返回每隔一个数字的数组

Java 正在使用数组方法打印最后一个数字,忽略其他数字

返回显示在所有三个子数组中的数字数组

如何使一个函数接受一个数字数组并给出小于70的数字?

返回一个数组的函数,该数组是其他两个数组的交集

给定两个数字n1和n2作为输入,返回一个数组,其中包含n1和n2之间的所有素数

Vim regex匹配一个空格,一个数字和其他所有内容,直到;

numpy:如何确定numpy数组的所有元素是否等于一个数字

CUDA:如何在GPU中将数组的所有元素求和成一个数字?

仅在找到第一个数字条目时返回 True,在所有其他情况下返回 False

在matplotlib中仅连接一个数字数组

确定一个数字数组是否可以分为两个数组,每个数组保存相同的数字总和

`push` 方法返回一个数字而不是一个数组

生成一个numpy数组,其所有数字组合的总和小于给定的数字

给定一个整数数组,output[i] = 除自身之外的所有元素的乘积

根据现有的字符串数组创建一个新的数字数组

从 0 循环到一个数字并遍历数组中的所有数字(javascript)