题目链接:​​https://leetcode.com/problems/product-of-array-except-self/​





238. Product of Array Except Self

​My Submissions​

Question


Total Accepted: 36393 Total Submissions: 87262 Difficulty: Medium





Given an array of n integers where n > 1, ​​nums​​, return an array ​ ​output​​ such that ​​output[i]​​ is equal to the product of all the elements of ​ ​nums​​ except ​​nums[i]​​.

Solve it without division and in O(n).

For example, given ​​[1,2,3,4]​​, return ​​[24,12,8,6]​​.

Follow up:

Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)



​Subscribe​​ to see which companies asked this question



Show Tags



Show Similar Problems




Have you met this question in a real interview?

 


Yes

 

No


​Discuss​


    给出一个数组,要求计算一个新数组。数组里全部的元素都是除了自己以外的元素乘积。而且要求不许用除法。

    《编程之美》上的一道原题。创建两个辅助数组。一个保存全部左边元素乘积的结果。一个保存全部右边元素乘积的结果。借助这两个数组,一次遍历就能够得到结果。

    我的AC代码

public class ProductofArrayExceptSelf {

public static void main(String[] args) {
int[] a = { 1, 2, 3, 4 };
System.out.print(Arrays.toString((productExceptSelf(a))));
}

public static int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] r = new int[len];

int[] left = new int[len];
int[] right = new int[len];
left[0] = nums[0];
for (int i = 1; i < len; i++) {
left[i] = left[i - 1] * nums[i];
}
right[len - 1] = nums[len - 1];
for (int i = len - 2; i >= 0; i--) {
right[i] = right[i + 1] * nums[i];
}

r[0] = right[1];
r[len - 1] = left[len - 2];
for (int i = 1; i < len - 1; i++) {
r[i] = left[i - 1] * right[i + 1];
}
return r;
}
}