剑指offer—构建乘积数组

华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/8

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

解析:用两个数组分别保存i以前和以后所有元素的乘积。然后计算输出向量的每个元素。

class Solution {
public:
    vector<int> multiply(const vector<int>& A)
    {
        int size = A.size();
        vector<int> B(size);
        vector<int> pre(size, 1), post(size, 1);
        for (int i = 1; i<A.size(); i++)
        {
            pre[i] = pre[i - 1] * A[i - 1];
        }
        for (int i = size - 2; i >= 0; i--)
        {
            post[i] = post[i + 1] * A[i + 1];
        }
        for (int i = 0; i<A.size(); i++)
        {
            B[i] = pre[i] * post[i];
        }
        return B;
    }
};

你可能感兴趣的:(剑指offer—构建乘积数组)