【前缀和】238. 除自身以外数组的乘积

238. 除自身以外数组的乘积

解题思路

  • 前缀与后缀的思路
  • 对于给定索引i,将它左边的所有数字乘积乘以右边所有数字的乘积
  • 初始化两个数组L R
  • 计算L[i] = L[i - 1] * nums[i - 1] 也就是左侧所有数字的乘积
  • 计算R[i] = R[i + 1] * nums[i + 1] 也就是右侧所有数字的成绩
  • 计算L[I] * R[i]
class Solution {
    public int[] productExceptSelf(int[] nums) {
        int[] L = new int[nums.length];
        int[] R = new int[nums.length];

        int[] ans = new int[nums.length];

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

        R[nums.length - 1] = 1;
        for(int j = nums.length - 2; j >= 0; j--){
            R[j] = R[j + 1] * nums[j + 1];
        }

        // 当RL数组填充完毕  计算L[i] * R[i]
        for(int k = 0; k < nums.length; k++){
            ans[k] = L[k] * R[k];
        }

        return ans;
    }
}

你可能感兴趣的:(#,Leetcode,#,数组,算法,数据结构,java)