给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
请 不要使用除法,且在 O(n)
时间复杂度内完成此题。
你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)
示例 1:
输入: nums =[1,2,3,4]
输出:[24,12,8,6]
示例 2: 输入: nums = [-1,1,0,-3,3] 输出: [0,0,9,0,0] 想法:时间复杂度O(n), 除了自身之外的乘积,也就是当前元素之前的乘积,乘上当前元素之后的乘积。分别计算当前元素之前的乘积a和当前元素之后的乘积b,然后计算得到答案。
-1 | 1 | 0 | -3 | 3 |
a:
1 | -1 | -1 | 0 | 0 |
b:
0 | 0 | -9 | 3 | 1 |
a[0]=1;b[len-1]=1;
for(int i =1; i < len; i++){
a[i] *= nums[i];
b[len-i-1] *=nums[len-i];
}
for(int i =1; i < len; i++){
ans[i]=ans[i] = a[i]*b[i];
}