时间:2021-05-20
本文实例为大家分享了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]。
不能使用除法。
代码
解法一
暴力法,这是本能就能想到的解决办法。
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; }解法二
从中可以看出通过数组A计算数组B的时候,红色部分不参与乘积的计算,以红色部分做分割,可以看错是红色左边部分的乘积与红色右边部分乘积的乘积
所以此时先根据数组A把对应左边部分的乘积和右边部分的乘积分别计算出来得到两个新的数组,即LEFT和RIGHT
这样可以得到公式:B[i]=LEFT[i]*RIGHT[i],如下所示
以下是代码实现
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 + " "); }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
构建乘积数组给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1
本文实例讲述了PHP计算数组中值的和与乘积的方法。分享给大家供大家参考,具体如下:一、概述:array_sum()函数用于计算数组中所有值的和。array_pr
Excel中怎么算乘积?下面就为大家介绍Excel中算乘积的方法步骤,不会的朋友快快来学习吧! 方法/步骤 1、打开Excel 2、首先点击数列C
Java中的数组是对象吗?Java和C++都是面向对象的语言。在使用这些语言的时候,我们可以直接使用标准的类库,也可以使用组合和继承等面向对象的特性构建自己的类
本文实例讲述了Java编程实现数组转成list及list转数组的方法。分享给大家供大家参考,具体如下:数组转成list:方法一:String[]userid={