LintCode:数组剔除元素之后的乘积

给定一个整数数组A。

定义B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], 计算B的时候请不要使用除法

样例

给出A=[1, 2, 3],返回 B为[6, 3, 2]

class Solution {
public:
    /**
     * @param A: Given an integers array A
     * @return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
     */
    vector productExcludeItself(vector &nums) {
        // write your code here
        int num = nums.size();
        vector B(num);
        for(int i=0; i         {
            long long temp = 1;
            for(int j=0; j             {
                if(j == i)
                   continue;
                temp *= (long long)nums[j];
            }
            B[i] = temp;
        }
        return B;
    }
};

给出一种复杂度为O(n)的解法

public ArrayList productExcludeItself(ArrayList A) {
        ArrayList res = new ArrayList();
         if (A==null || A.size()==0) return res;
         long[] lProduct = new long[A.size()];
         long[] rProduct = new long[A.size()];
         lProduct[0] = 1;
         for (int i=1; i
             lProduct[i] = lProduct[i-1]*A.get(i-1);
         }
         rProduct[A.size()-1] = 1;
         for (int j=A.size()-2; j>=0; j--) {
             rProduct[j] = rProduct[j+1]*A.get(j+1);
         }
         for (int k=0; k
             res.add(lProduct[k] * rProduct[k]);
         }
         return res;
    }
}

你可能感兴趣的:(lintcode)