思路:
不能用除法。
假设要算 x[i] 的 ouput[i] :
那么 x[i] 左边所有的数字乘起来,再乘以 x[i] 右面所有的数字乘起来的积就是答案。
所以可以两次遍历数组,第一次正向遍历,算每个数字左边的乘积,保存在 ouput[i] 中,第二次反向遍历,算每个数字右面所有数字的乘积,再乘以上一次遍历的结果,就是每个位置最后的答案。
时间复杂度O(N),空间复杂度O(N)。
java code:
public class Solution {
public int[] productExceptSelf(int[] nums) {
int len = nums.length;
int[] ans = new int[len];
ans[0] = 1;
for(int i = 1; i < len; ++i) {
ans[i] = nums[i - 1] * ans[i - 1];
}
int right = 1;
for(int i = len - 1; i >= 0; --i) {
ans[i] = ans[i] * right;
right = nums[i] * right;
}
return ans;
}
}
本文介绍了一种高效算法,用于计算一个整数数组中除了自身之外其余元素的乘积,该算法避免了直接使用除法运算,通过两次遍历数组的方式实现,确保了时间复杂度为O(N)。
1455

被折叠的 条评论
为什么被折叠?



