leetcode-238-product of array except self

Problem Description:

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.)

题目大意:

给定一个数组,输出为其他数组中所有其他元素的乘积,不能使用除法,时间复杂度应为O(n)

Solutions:

使用动态规划,遍历2次数组,求出左边所有元素的乘积和右边所有元素的乘积,再把它们相乘即可。

Code in C++:

class Solution {
    public:
        vector<int> productExceptSelf(vector<int>& nums) {
            vector<int> res;
            if(nums.empty()) return res;
               vector<int> productleft(nums.size(),1);
            vector<int> productright(nums.size(),1);
            for(int i =1;i<nums.size();i++)
                   productleft[i]=productleft[i-1]*nums[i-1];
            for(int j=nums.size()-2;j>=0;j--)
                productright[j]=productright[j+1]*nums[j+1];
            for(int i =0;i<nums.size();i++)
                res.push_back(productleft[i]*productright[i]);
            return res;
    }
};