import java.util.HashMap; import java.util.Map; public class ProductOfArrayExceptSelf { public int[] productExceptSelf(int[] nums) { if (nums == null || nums.length == 0) { return new int[0]; } Map backward = new HashMap<>(); Map forward = new HashMap<>(); backward.put(0, nums[0]); forward.put(nums.length-1, nums[nums.length-1]); int i = 1; int j = nums.length - 2; while (i < nums.length) { backward.put(i, nums[i]*backward.get(i-1)); forward.put(j, nums[j]*forward.get(j+1)); i++; j--; } int[] result = new int[nums.length]; result[0] = forward.get(1); result[nums.length - 1] = backward.get(nums.length - 2); for (int k = 1; k < result.length-1; k++) { result[k] = backward.get(k-1) * forward.get(k+1); } return result; } }