Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Note: Please solve it without division and in O(n).
不让用除法,还要O(n)。可以使用两个数组,记录前缀积和后缀积,然后对应的前缀积和后缀积相乘,就可以了。需要注意顺序。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> pre(nums.size(), 1), back(nums.size(), 1);
pre[0] = 1, back[nums.size()-1] = 1;
for(int i = 1; i < nums.size(); ++i)
pre[i] = pre[i-1]*nums[i-1];
for(int i = nums.size()-2; i >= 0; --i)
back[i] = back[i+1]*nums[i+1];
vector<int> out;
for(int i = 0; i < nums.size(); ++i)
{
out.push_back(pre[i]*back[i]);
}
return out;
}
};