gpt4 book ai didi

Java - 将数组值乘以另一个数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:30:41 25 4
gpt4 key购买 nike

我有一个包含 x 值(x 可以由用户定义)的 int[] 数组,这些值是 1 到 9 之间的随机整数。现在我想创建另一个具有相同值的数组值的数量,新数组的每个值都是来自另一个数组的所有值的乘积,相同索引除外。

例如:

  • 数组 1:{4,3,5,7}
  • 数组 2:{3*5*7, 4*5*7, 4*3*7, 4*3*5} = {105, 140, 84, 60}

这是我所拥有的:

public static int[] multiplyArrayValues (int [] values) {

int array[] = new int[values.length];

for (int y = 0; y < array.length; y++) {
array[y] = 1;
}

/*for (int i = 0; i < array.length; i++) { // wrong
for (int z = 0; z < x; z++) {
if (z != i) {
array[i] = array[i] * values[z];
}
}
}*/

return array;
}

困难在于,为了提高性能,我必须避免 for 循环中的 for 循环。这就是为什么那个 block 被注释掉的原因。不允许分割。

最佳答案

更多的是关于要使用的算法的问题。您可以将原始数组的所有数字相乘,我们称之为 p。现在新数组中 i 位置的数字是 p/values[i]

如果一定不能使用除法,可以设置两个临时数组,一个包含索引较小或相等的值的乘积,另一个包含索引较大或相等的值的乘积。

s[i] = product of v[j] where j <= i
l[i] = product of v[j] where j >= i

两个数组都可以设置一个简单的循环。

现在您可以将 array[i] 计算为 s[i-1] * l[i+1],特别注意边界值。这也只需要一个简单的循环。

使用这些想法并进行一些优化导致以下代码

public static int[] multiplyArrayValues (int [] values) {
int[] a = new int[values.length];
int p = 1;
for (int i = values.length - 1; i >= 0; i--) {
a[i] = p;
p *= values[i];
}
p = 1;
for (int i = 0; i < values.length; i++) {
a[i] *= p;
p *= values[i];
}
return a;
}

关于Java - 将数组值乘以另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com