238. 除自身以外数组的乘积 - 力扣(LeetCode)
解法:前缀积和后缀积
思路:answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。
而前缀积(f[i])是:[0,i-1]所有元素的乘积 后缀积(g[i])的范围是:[i+1,n-1]所有元素的乘积 这样处理answer[i] = f[i] * g[i] 就可以完美得出最终结果。
细节:
1.因为是前缀和后缀 积
所以f[0] = 1 g[n-1] = 1
class Solution
{
public:
vector<int> productExceptSelf(vector<int>& nums)
{
int n = nums.size();
vector<int> f(n);
f[0] = 1;
for(int i = 1;i<n;i++)
{
f[i] = f[i-1] * nums[i-1];
}
vector<int> g(n);
g[n-1] = 1;
for(int i = n-2;i>=0;i--)
{
g[i] = g[i+1] * nums[i+1];
}
vector<int> answer(n);
for(int i = 0;i<n;i++)
{
answer[i] = f[i] * g[i];
}
return answer;
}
};