题目:除了自身以外数组的乘积
因为不能使用除法——通过一次遍历计算整个数组的乘积,之后再进行一次遍历,每次除以当前元素的值
同时要求时间复杂度是O(n),空间复杂度要求是O(1),但是输出的数组不计入额外空间,所以需要直接对输出数组进行操作;
可以先通过一次遍历计算出左边的乘积,再从后往前进行一次遍历,将右边的乘积再乘到res的当前元素上去,这样最终得到的res数组就是除自身外的元素的乘积
注:这里需要提前预留好res的空间,而不是在循环中每次都调用push_back
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