Skip to content

除自身以外数组的乘积

理解题目:

题目要求对于给定的整数数组,计算除了当前元素以外所有元素的乘积。

代码实现:

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;
    }
}

步骤解释:

  1. 创建一个长度为 n 的数组 output 用于存储结果。

  2. 第一次遍历数组,计算当前元素左侧所有元素的乘积,并将结果存入 output 数组中。

  3. 第二次遍历数组,计算当前元素右侧所有元素的乘积,并将其乘以左侧元素的乘积,最终结果存入 output 数组中。

  4. 返回 output 数组。

时间复杂度: 两次遍历数组,时间复杂度为 O(n)

空间复杂度: 除了存储输出结果的数组外,只使用了常数级别的额外空间,空间复杂度为 O(1)