知识点

前后缀分解 前缀和

思路

不能使用除法,我们可以预处理每个位置的前后缀的乘积,然后遍历每个位置用前后缀的乘积来计算得到答案。

时间复杂度

预处理前后缀和 O(n)

遍历整个数组 O(n)

整体时间复杂度为O(n)

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param milk_amount int整型vector 
     * @return int整型vector
     */
    vector<int> product_except_self(vector<int>& milk_amount) {
        int n = milk_amount.size();
        vector<int> l(n + 1), r(n + 1);
        l[0] = r[0] = 1;
        for (int i = 1; i <= n; i ++) {
            l[i] = l[i - 1] * milk_amount[i - 1];
            r[i] = r[i - 1] * milk_amount[n - i];
        }
        vector<int> res(n);
        for (int i = 0; i < n; i ++) {
            res[i] = l[i] * r[n - i - 1];
        }
        return res;
    }
};