leetcode 力扣 238 除自身以外数组的乘积

49 阅读1分钟

动态规划

有点脑筋急转弯的味道了

要求[....3....]中除了3以外其他数的乘积,我们需要知道3左边所有数的乘积,以及3右边所有数的乘积,两者相乘即可。

我们可以使用两个数组

  • L[i]表示nums[i]左边的数的乘积,也就是nums[0]乘到nums[i - 1]
  • R[i]表示nums[i]右边的数的乘积,也就是nums[n - 1]乘到nums[i + 1]

1.jpeg

public int[] productExceptSelf(int[] nums) {
        int n = nums.length;

        int[] L = new int[n];
        int[] R = new int[n];
        int[] answer = new int[n];

        L[0] = 1;
        for (int i = 1; i < n; i++) {
            L[i] = L[i - 1] * nums[i - 1];
        }

        R[n - 1] = 1;
        for (int i = n - 2; i >= 0; i--) {
            R[i] = R[i + 1] * nums[i + 1];
        }

        for (int i = 0; i < n; i++) {
            answer[i] = L[i] * R[i];
        }

        return answer;
}