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).
这道题目,一开始很容易想到求全部的乘机,然后除以每个当前数,但是没有考虑到以下几点
1、其中有0存在;
2、全部是0的情况;
这两种情况使得这种方法并不明智,因此正确的方式是类似高斯算等差数列的方法一样
比较好的解决方法是构造两个数组相乘:
1、[1, a1, a1*a2, a1*a2*a3]
2、[a2*a3*a4, a3*a4, a4, 1]
这样思路是不是清楚了很多,而且这两个数组我们是比较好构造的。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> new_nums(nums.size());
int p = 1;
int i = 1;
new_nums[0] = 1;
for (; i < nums.size(); i++)
{
p = p*nums[i - 1];
new_nums[i] = p;
}
p = 1;
for (i=nums.size()-2; i >=0; i--)
{
p = p*nums[i+1];
new_nums[i] *= p;
}
return new_nums;
}
};