构建乘积数组

来源:互联网 发布:Mac字幕太小 编辑:程序博客网 时间:2024/06/06 22:33

题目描述

给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]A[i-1]*A[i+1]…*A[n-1]。不能使用除法。
思路:
类似于动态规划
用两个数组保存
v1中v1[i]保存前i-1个数的乘积
v1[0]=1
然后从前往后遍历v[i]=v[i-1]*A[i]
v2中v2[i]保存后面i+1到n个数的乘积
v2[n-1]=1
然后从后往前遍历v2[i]=v2[i+1]*A[i]
最后v1 v2对应数字相乘就可以了

class Solution {public:    vector<int> multiply(const vector<int>& A) {        if(A.size()==0){            return A;        }        vector<int> v1,v2;        v1.push_back(1);        v2.push_back(1);        for(int i=1;i<A.size();i++){            v1.push_back(v1[i-1]*A[i-1]);        }        for(int i=A.size()-2;i>=0;i--){            v2.insert(v2.begin(),v2[0]*A[i+1]);        }        for(int i=0;i<A.size();i++){            v1[i]*=v2[i];        }        return v1;    }};
0 0
原创粉丝点击