剑指offer-构建乘积数组
Posted zhacai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指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]。不能使用除法。
方法一:逐个相乘,时间复杂度为O(n2)
1 public int[] multiply(int[] A) {//数组 my 2 if(null==A){ 3 return null; 4 } 5 int[] re = new int[A.length]; 6 for(int i=0;i<A.length;i++){ 7 re[i]=1; 8 } 9 for(int i=0;i<A.length;i++){ 10 for(int j=0;j<A.length;j++){ 11 if(i!=j){ 12 re[j]*=A[i]; 13 } 14 } 15 } 16 return re; 17 }
方法二:先正向计算B[i]=A[0]*A[1]*...*A[i-1],再逆向相乘B[i]*=A[n-1]*A[n-2]*...*A[i+1],时间复杂度为O(n)
1 public int[] multiply(int[] A) {//数组 mytip 2 if(null==A||0==A.length){ 3 return null; 4 } 5 int[] re = new int[A.length]; 6 re[0] = 1; 7 for(int i=1;i<A.length;i++){ 8 re[i]=re[i-1]*A[i-1]; 9 } 10 int temp = 1; 11 for(int i=A.length-1;i>=0;i--){ 12 re[i]*=temp; 13 temp*= A[i]; 14 } 15 return re; 16 }
以上是关于剑指offer-构建乘积数组的主要内容,如果未能解决你的问题,请参考以下文章