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;}
};