【剑指offer】【模拟题】66. 构建乘积数组

题目链接:https://leetcode-cn.com/problems/gou-jian-cheng-ji-shu-zu-lcof/
时间复杂度O(n)
空间复杂度O(1)

class Solution {
public:
    vector<int> constructArr(const vector<int>& A) {
        if(A.empty()) return A;
        int n = A.size();
        vector<int> B(n);
        //先计算B[i] = A[0]~A[i - 1]的乘积
        for(int i = 0, p = 1; i < n; i++){
            B[i] = p;
            p *= A[i];
        }
        //再计算B[i] = B[i] * A[i + 1]~A[n]的成绩
        for(int i = n - 1, p = 1; ~i; i--){
            B[i] *= p;
            p *= A[i];
        }
        return B;
    }
};

posted @ 2020-04-20 16:32  NaughtyCoder  阅读(69)  评论(0)    收藏  举报