剑指Offer——JZ51.构造乘积数组【前后缀数组】

题目传送门


剑指Offer——JZ51.构造乘积数组【前后缀数组】_第1张图片


题解

  • 区间线性问题,直接考虑前后缀即可
  • 分别计算前缀后缀乘积和,即可
  • 线性复杂度

AC-Code

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

你可能感兴趣的:(剑指Offer)