Product of Array Exclude Itself
Given an integers array A.
Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WITHOUT divide operation.
Example
For A = [1, 2, 3]
, return [6, 3, 2]
.
分析:
1 public class Solution { 2 public int[] productExceptSelf(int[] A) { 3 int[] left = new int[A.length]; 4 int[] right = new int[A.length]; 5 int[] result = new int[A.length]; 6 7 for (int i = 0; i < A.length; i++) { 8 left[i] = i == 0 ? 1 : left[i - 1] * A[i - 1]; 9 right[A.length - 1 - i] = (i == 0) ? 1 : right[A.length - i] * A[A.length - i]; 10 } 11 12 for (int i = 0; i < A.length; i++) { 13 result[i] = left[i] * right[i]; 14 } 15 return result; 16 } 17 }
1 public class Solution { 2 public int[] productExceptSelf(int[] nums) { 3 int n = nums.length; 4 int[] res = new int[n]; 5 res[0] = 1; 6 for (int i = 1; i < n; i++) { 7 res[i] = res[i - 1] * nums[i - 1]; 8 } 9 int right = 1; 10 for (int i = n - 1; i >= 0; i--) { 11 res[i] *= right; 12 right *= nums[i]; 13 } 14 return res; 15 } 16 }
one pass
1 class Solution { 2 public int[] productExceptSelf(int[] nums) { 3 int[] result = new int[nums.length]; 4 Arrays.fill(result, 1); 5 int left = 1, right = 1; 6 for (int i = 0, j = nums.length - 1; i < nums.length - 1; i++, j--) { 7 left *= nums[i]; 8 right *= nums[j]; 9 result[i + 1] *= left; 10 result[j - 1] *= right; 11 } 12 return result; 13 } 14 }