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

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。


思路:使用前缀和与后缀和进行处理。

i 的前缀和为 pre[i-1]
i 的后缀和为 suf[i+1]
则 ans[i] = pre[i-1] * suf[i+1]
更进一步的降低时间复杂度:

  • 后缀
    long suf = 1
    for(i=n-1; i>=0; i–) {
     ans[i] = suf
     suf = suf*nums[i]
    }
  • 前缀
    long pre = 1
    for(int i=0; i  ans[i] = sufans[i]%MOD;
     suf = suf
    nums[i]%MOD;
    }
class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] res = new int[n];
        res[n-1] = 1;
        int suf = 1;
        for(int i=n-1; i>=0; i--) {
            res[i] = suf;
            suf = suf*nums[i];
        }

        int pre = 1;
        for(int i=0; i<n; i++) {
            res[i] = pre*res[i];
            pre = pre*nums[i];
        }
        return res;
    }
}

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