[leetcode_238] Product of Array Except Self

输入数组a1,a2,a3…

生成数组a2*a3, a1*a3, a1*a2,但是希望能够在O(n)的时间内解决,且不能使用除法。

用两个额外的数组记录ai前和ai后的乘积即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int size = nums.size();
        vector<int> front(size), back(size), result(size);
        front[0] = 1;
        back[size-1] = 1;
        for (int i = 1;i < size;i++)
        {
            front[i] = front[i-1] * nums[i-1];
        }
        for (int i = size - 2;i >= 0;i--)
        {
            back[i] = back[i + 1] * nums[i + 1];
        }
        result[0] = back[0];
        result[size-1] = front[size - 1];
        for (int i = 1;i < size - 1;i++)
        {
            result[i] = front[i] * back[i];
        }
        return result;
    }
};
Licensed under CC BY-NC-SA 4.0