题目:
代码(首刷自解 2024年3月3日):
采用前缀积和后缀积,O(N)时间复杂度和O(N)空间复杂度
空间复杂度O(1)的方法就是从左到右遍历nums再从右到左边遍历nums,用一个temp值来存储前缀积和后缀积。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> sumPrefix(n, 1);
vector<int> sumSuffix(n, 1);
sumPrefix[0] = nums[0];
for (int i = 1; i < n; ++i) sumPrefix[i] = nums[i] * sumPrefix[i - 1];
sumSuffix[n - 1] = nums[n - 1];
for (int i = n - 2; i >= 0; --i) sumSuffix[i] = nums[i] * sumSuffix[i + 1];
vector<int> res;
res.push_back(sumSuffix[1]);
for (int i = 1; i < n - 1; ++i) {
res.push_back(sumPrefix[i - 1] * sumSuffix[i + 1]);
}
res.push_back(sumPrefix[n - 2]);
return res;
}
};