题目:
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].Solve it without division and in O(n).
For example, given [1,2,3,4], return [24,12,8,6].
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
翻译:
返回的结果中output[i]是原数组中除了nums[i]以外所有元素的乘积。
难点:
1. 不能使用除法;
2. 时间复杂度O(n),还是比较苛刻的;
3. 尽可能不用额外的空间。
思路:
从头到尾遍历一遍,multi[i]是nums[i]左边所有元素的乘积;再从尾到头遍历一遍,每个multi[i]再乘上原数组nums[i]右边的元素,用一个int就可以标记右边所有数的乘积。
代码:
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int> multi;
multi.resize(nums.size(),1);
for (int i=1;i<nums.size();i++)
{
multi[i]=multi[i-1]*nums[i-1];
}
int temp=1;
for (int i=nums.size()-1;i>=0;i--)
{
multi[i]*=temp;
temp*=nums[i];
}
return multi;
}
};
结果: