title
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).
Follow up:
Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)
solution
方法1: 求出整个数组和积 然后对与每个数的答案,就是这个数组的积除以这个数
方法2: 采用前缀和数组的思路我们用一个数组记录nums0 nums1 …numsi-1,再记录numsi+1 … * numsn-1,将这两个数相乘即可获得resi。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> d(nums.size());
d[0] = 1;
for (int i = 1; i < nums.size(); i++) {
d[i] = nums[i-1] * d[i - 1];
}
int right = 1;
for (int i = nums.size() - 1; i >= 0; i--) {
d[i] = right * d[i];
right *= nums[i];
}
return d;
}
};