【牛客网】剑指offer编程题:构建乘积数组

 【牛客网】剑指offer编程题:构建乘积数组

 因为题目规定不能用除法,所以把 B 分成两部分,即前缀部分和后缀部分:

      mul_pre[i] = A[0]*A[1]*....A[i-1]*A[i];

      mul_suf[i] = A[i]*A[i+1]*...A[n-1];

      B[i] = mul_pre[i-1] * mul_suf[i+1];

代码如下:

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        int n = A.size();
        vector<int> mul_pre(n, 0); //定义前缀
        vector<int> mul_suf(n, 0); //定以后缀
        vector<int> B(n, 0);
        for (int i = 0; i < n; i++)  //计算前缀
        {
            if (i == 0)
                mul_pre[i] = A[i]; //边界
            else 
                mul_pre[i] = mul_pre[i-1] * A[i];
        }
        for (int i = n-1; i >= 0; i--) //计算后缀
        {
            if (i == n-1)
               mul_suf[i] = A[i]; //边界
            else 
               mul_suf[i] = mul_suf[i+1] * A[i];
        }
        for (int i = 0; i < n; i++) //计算B
        {
            if (i == 0)
                B[i] = mul_suf[i+1];
            else if (i == n-1)
                B[i] = mul_pre[i-1];
            else
                B[i] = mul_pre[i-1] * mul_suf[i+1];
        }
        return B;
    }
};

【牛客网】剑指offer编程题:构建乘积数组