剑指offer46--乘积数组的构建

来源:互联网 发布:lol爷大干淘宝零食店 编辑:程序博客网 时间:2024/06/16 03:07

一、题目


题目:给定一个数组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],不能使用除法。


二、举例



例如:A[]={1,2,3,4}求B[] 
B[0]=A[1]×A[2]×A[3]=2×3×4=24 
B[1]=A[2]×A[3]×A[0]=3×4×1=12
B[2]=A[3]×A[0]×A[1]=4×1×2=8
B[3]=A[0]×A[1]×A[2]=1×2×3=6


三、思想


(1)遍历数组A,没遍历一次就在数组B中增加一个对应的元素
(2)数组B中要写入是是B[i]时,对应数组A[i]的值暂时为1,这样将A中的所有元素相乘
(3)不知道这个思路是不是太简单了,看大神的思路也没太看懂,先这样吧,下一次再补充


四、程序

package 剑指offer;/*题目:给定一个数组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 class Test51 {public static int[] findArrayB(int arrayA[]){if(arrayA == null || arrayA.length < 1){return null;}int arrayB[] = new int[arrayA.length];for(int i = 0; i < arrayA.length; i++){arrayB[i] = toFindNum(arrayA, i);}return arrayB;}// 根据下标元素i去发现要存入B[i]中的numpublic static int toFindNum(int arrayA[], int i){int num = 1;for(int j = 0; j < arrayA.length; j++){if(j != i){num *= arrayA[j];}else if(j == i){num *= 1;}}return num;}public static void main(String args[]){int arrayA[] = new int[]{1, 2, 3, 4};int arrayB[] = new int[]{};arrayB = findArrayB(arrayA);for(int i = 0; i < arrayB.length; i++){System.out.println(arrayB[i]);}}}
------output------
241286



1 0
原创粉丝点击