Java构建乘积数组的方法

2025-05-29 0 99

本文实例为大家分享了java构建乘积数组的具体实现代码,供大家参考,具体内容如下

给定一个数组a[0,1,…,n-1],请构建一个数组b[0,1,…,n-1],其中b中的元素b[i]=a[0]a[1]…a[i-1]*a[i+1]…*a[n-1]。

不能使用除法。

代码

解法一

暴力法,这是本能就能想到的解决办法。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
public static int[] multiply(int[] array) {

if (array == null) {

return null;

}

int len = array.length;

if (len == 0) {

return null;

}

int[] result = new int[len];

for (int i = 0; i < len; i++) {

int multiply = 1;

for (int j = 0; j < len; j++) {

if (j != i) {

multiply *= array[j];

}

}

result[i] = multiply;

}

return result;

}

解法二

Java构建乘积数组的方法

从中可以看出通过数组a计算数组b的时候,红色部分不参与乘积的计算,以红色部分做分割,可以看错是红色左边部分的乘积与红色右边部分乘积乘积

所以此时先根据数组a把对应左边部分的乘积和右边部分的乘积分别计算出来得到两个新的数组,即left和right

这样可以得到公式:b[i]=left[i]*right[i],如下所示

  • 对于b[0],因为没有左边部分,可以认为是1*right[0]
  • 如果b[n-1],没有右边部分,所以认为是left[n-1]*1

Java构建乘积数组的方法

以下是代码实现

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41
public static int[] multiply2(int[] array) {

if (array == null) {

return null;

}

int len = array.length;

if (len == 0) {

return null;

}

int[] left = new int[len];

int[] right = new int[len];

int[] result = new int[len];

// 数组b中第一个数字没有左边部分,所以左边乘积数组第一个数字是1

left[0] = 1;

// 计算b[i]对应的在a中的左边部分的乘积,数组a从前向后计算

for (int i = 1; i < len; i++) {

// 因为要b[i]不需要计算a[i],所以左边部分的乘积计算其实需要的是a中对应下标i的上一个下标及之前的数字

left[i] = left[i - 1] * array[i - 1];

}

// 数组b中最后一个数字没有右边部分,所以右边乘积数组的最后一个数字是1

right[len - 1] = 1;

// 计算b[i]对应的在a中的右边部分的乘积,数组a从后向前计算,这样才可以一次遍历完

// 因为计算可以用到上一次的结果,即上一次的结果*本次下标的值

for (int i = len - 1; i > 0 ; i--) {

// 因为要b[i]不需要计算a[i],所以右边部分的乘积计算其实需要的是a中对应下标i的下一个下标及之后的数字

right[i - 1] = right[i] * array[i];

}

for (int i = 0; i < len; i++) {

result[i] = left[i] * right[i];

}

return result;

}

public static void main(string[] args) {

int[] array = {1, 2, 3, 4};

int[] result = multiply2(array);

for (integer i : result) {

system.out.print(i + " ");

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://blog.csdn.net/zl18310999566/article/details/80271566

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java构建乘积数组的方法 https://www.kuaiidc.com/109891.html

相关文章

发表评论
暂无评论