构建乘积数组

来源:互联网 发布:淘宝店贷款 编辑:程序博客网 时间:2024/06/02 21:09

题目

给定一个数组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]。不能使用除法。

思路

使用交叉相乘的方法,把B[i]分成两部分,即第一遍先乘A[0]A[1]A[i-1],即B[i] = B[i - 1] A[i - 1] ,当i = 0时B[i] = 1;然后乘以后面的A[i+1]…*A[n-1],这个可以倒过来乘,用一个res(初始为1)来存储A[i+1]A[n-1]得值,即i从 n - 2开始,每次res = A[i + 1],然后B[i] *= res即可。

参考代码

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