数组中元素乘积
要求:
给定某无序数组,要求返回新数组 output ,
其中 output[i] 为原数组中除了下标为 i 的元素之外的元素乘积,要求以 O(n) 复杂度实现:
思路:
假设现在给定一个数组[-2,-2,-3,2]
那么最后要求output的第一个元素为(-2)*(-3)*2=12
第二个元素为(-2) * (-3) * 2=12,
第三个元素为(-2) * (-2) * 2=8,
第四个元素为(-2) * (-2) * (-3)=-12,
可以发现最后一个元素的乘积就是前面三个元素的乘积,
倒数第二个元素的乘积就是前面两个的乘积再乘以最后一个元素…
所以我们的第一步就是得到在output里每个位置的前面几个元素的乘积,例如
对于第一个位置,我们给一个初始值1,因为1乘以任何数都不变
对于第二个位置,我们用初始值乘以第一个元素,即1*(-2)
对于第三个位置,1*(-2) * (-2)相当于前面两个数的乘积
对于第四个位置,1*(-2)* (-2)*(-3)相当于前面三个数的乘积
然后下一步我们要得到最终在output显示的元素
对于最后一个位置而言,毫无疑问,就是前面三个数的乘积
对于倒数第二个位置,它需要前面两个数的乘积再乘以最后一个数,我们第一步已经得到了前面两个数的乘积1*(-2)* (-2),
所以现在需要得到最后一个数,最后一个数同样的道理,我们可以用1最后一个数。
对于倒数第三个位置,它需要前面一个数的乘积再乘以最后两个数,我们第一步已经得到了前面一个数的乘积1 * (-2),
所以现在需要得到最后两个数的乘积,同样的道理,我们可以用1最后两个数1 * 2 * (-3)。所以最终结果就是第一个数乘以最后两个数1*(-2)* 1 * 2*(-3)
const arr1 = [2,2