构建乘积数组

70 阅读1分钟

构建乘积数组

给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其中B中的元素B[i]=A[0]×A[1]×… ×A[i-1]×A[i+1]×…×A[n-1]。

不能使用除法。
思考题:
能不能只使用常数空间?(除了输出的数组之外)

样例
输入:[1, 2, 3, 4, 5]
输出:[120, 60, 40, 30, 24]

数学

时间复杂度O(n)

class Solution {
    public int[] multiply(int[] A) {
        int[] arr = new int[A.length];
        for(int i = 0,p = 1;i < A.length;i++){
            arr[i] = p;
            p *= A[i];
        }
        for(int i = A.length - 1,p = 1;i >= 0;i--){
            arr[i] *= p;
            p *= A[i];
        }
        return arr;
    }
}