除自身以外数组的乘积
理解题目:
题目要求对于给定的整数数组,计算除了当前元素以外所有元素的乘积。
代码实现:
public class ProductExceptSelf {
// 除自身以外数组的乘积
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] output = new int[n];
// 计算左侧元素的乘积
int leftProduct = 1;
for (int i = 0; i < n; i++) {
output[i] = leftProduct;
leftProduct *= nums[i];
}
// 计算右侧元素的乘积,并乘以左侧元素的乘积
int rightProduct = 1;
for (int i = n - 1; i >= 0; i--) {
output[i] *= rightProduct;
rightProduct *= nums[i];
}
return output;
}
}
步骤解释:
-
创建一个长度为 n 的数组 output 用于存储结果。
-
第一次遍历数组,计算当前元素左侧所有元素的乘积,并将结果存入 output 数组中。
-
第二次遍历数组,计算当前元素右侧所有元素的乘积,并将其乘以左侧元素的乘积,最终结果存入 output 数组中。
-
返回 output 数组。
时间复杂度: 两次遍历数组,时间复杂度为 O(n)。
空间复杂度: 除了存储输出结果的数组外,只使用了常数级别的额外空间,空间复杂度为 O(1)。