两重循环--最笨方法
构建乘积数组
http://www.nowcoder.com/questionTerminal/94a4d381a68b47b7a8bed86f2975db46
import java.util.ArrayList; public class Solution { // 方法一: 暴力双重循环---O(N^2) public int[] multiply(int[] A) { int[] B = new int[A.length]; for (int i = 0; i < A.length; i++) { int temp = 1; for (int j = 0; j < A.length; j++) { if (j != i) temp *= A[j]; } B[i] = temp; } return B; } }
// 方法二: 分别计算B的以i为界限左右两侧,这样可以保存并使用上一次计算的B[i-1]的值,以此来降低时间复杂度 public int[] multiply(int[] A) { int[] B = new int[A.length]; B[0] = 1; for (int i = 1; i < A.length; i++) { B[i] = B[i - 1] * A[i - 1]; } int right = 1; for (int i = A.length - 1; i >= 0; i--) { B[i] *= right; right *= A[i]; } return B; }