剑指offer-51
构建乘积数组
http://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46
维护两个l-1的数组,一个存储从0到i的乘积,另一个存储从l-1到i-1的乘积,B[i] = B0[i-1]*B1[i]。2n的空间,3n的时间
import java.util.ArrayList; public class Solution { public int[] multiply(int[] A) { int l = A.length; int[] B = new int[l]; int[] B0 = new int[l-1]; int[] B1 = new int[l-1]; B0[0] = A[0]; for(int i=1;i<l-1;i++){ B0[i] = B0[i-1]*A[i]; } B1[l-2] = A[l-1]; for(int i=l-3;i>=0;i--){ B1[i] = B1[i+1]*A[i+1]; } B[0] = B1[0]; B[l-1] = B0[l-2]; for(int i=1;i<l-1;i++){ B[i] = B0[i-1]*B1[i]; } return B; } }