(LeetCode 面试经典 150 题 ) 238. 除自身以外数组的乘积 (前缀和)
题目:238. 除自身以外数组的乘积
思路:前缀和,时间复杂度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:=1v:=make([]int,n)for i:=n-1;i>0;i-- {v[i]=pre[i-1]*tmptmp*=nums[i]}v[0]=tmpreturn v
}