[剑指Offer]66-构建乘积数组

题目

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

题解

  • 把数组B想象成用矩阵构建,B[i]为矩阵中第i行所有元素乘积,构建befI和afterI数组,B[i]=befI[i]*afterI[i]。
  • 构建befI afterI数组分别自上而下和自下而上,时间复杂度O(n).
  • 总体时间复杂度O(n).

代码

public class Main {
	public static void main(String[] args) {
		int[] A= {1,2,3,4,5};
		int[] B=multiply(A);
		for(int num:B) {
			System.out.println(num);
		}
	}
	
	public static int[] multiply(int[] A) {
		int len=A.length;
		int[] B=new int[len];
		int[] befI=new int[len];
		int[] afterI=new int[len];
		
		befI[0]=1;
		afterI[len-1]=1;
		for(int i=1;i<len;++i) {
			befI[i]=befI[i-1]*A[i-1];
		}
		for(int i=len-2;i>=0;--i) {
			afterI[i]=afterI[i+1]*A[i+1];
		}
		
		for(int i=0;i<len;++i) {
			B[i]=befI[i]*afterI[i];
		}
		return B;
    }
}

posted on 2019-07-06 13:56  coding_gaga  阅读(94)  评论(0编辑  收藏  举报

导航