题目:除了自身以外数组的乘积

思路如下:

因为不能使用除法——通过一次遍历计算整个数组的乘积,之后再进行一次遍历,每次除以当前元素的值

同时要求时间复杂度是O(n),空间复杂度要求是O(1),但是输出的数组不计入额外空间,所以需要直接对输出数组进行操作;

可以先通过一次遍历计算出左边的乘积,再从后往前进行一次遍历,将右边的乘积再乘到res的当前元素上去,这样最终得到的res数组就是除自身外的元素的乘积

注:这里需要提前预留好res的空间,而不是在循环中每次都调用push_back

productExceptSelf()

 1vector<int> productExceptSelf(vector<int>& nums)
 2{
 3    const int sz = nums.size();
 4    std::vector<int> res(sz);
 5    res[0] = 1;
 6
 7    int temp = 1;
 8    for(int i = 0; i < sz; i++)
 9    {
10        res[i] = temp;
11        temp *= nums[i];
12    }
13
14    temp = 1;
15    for(int j = sz - 1; 0 <= j; j--)
16    {
17        res[j] *= temp;
18        temp *= nums[j];
19    }
20
21    return res;
22}

原文:medium