(LeetCode 面试经典 150 题 ) 238. 除自身以外数组的乘积 (前缀和)

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

(LeetCode 面试经典 150 题 ) 238. 除自身以外数组的乘积 (前缀和)_第1张图片

思路:前缀和,时间复杂度0(n)。
先用前缀和预处理出前n的乘计和,然后第二次遍历时,从后往前,同时维护右边的乘计和即可。

C++版本:

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n=nums.size();
        vector<int> pre(n,1);
        pre[0]=nums[0];
        for(int i=1;i<n;i++){
            pre[i]=pre[i-1]*nums[i];
        }
        vector<int> v(n);
        int tmp=1;
        for(int i=n-1;i>0;i--){
            v[i]=pre[i-1]*tmp;
            tmp*=nums[i];
        }
        v[0]=tmp;
        return v;
    }
};

JAVA版本:

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n=nums.length;
        int[] pre=new int[n];
        pre[0]=nums[0];
        for(int i=1;i<n;i++){
            pre[i]=pre[i-1]*nums[i];
        }
        int[] v=new int[n];
        int tmp=1;
        for(int i=n-1;i>0;i--){
            v[i]=pre[i-1]*tmp;
            tmp*=nums[i];
        }
        v[0]=tmp;
        return v;
    }
}

Go版本:

func productExceptSelf(nums []int) []int {
    n:=len(nums)
    pre:=make([]int,n)
    pre[0]=nums[0]
    for i:=1;i<n;i++ {
        pre[i]=pre[i-1]*nums[i]
    }
    tmp:=1
    v:=make([]int,n)
    for i:=n-1;i>0;i-- {
        v[i]=pre[i-1]*tmp
        tmp*=nums[i]
    }
    v[0]=tmp
    return v
}

你可能感兴趣的:(LeetCode,面试经典,150,题,LeetCode,C++,JAVA,Go版本,leetcode,面试,算法,c++,go,java)