ACWING86. 构建乘积数组(剑指offer)

给定一个数组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]。

不能使用除法。

样例
输入:[1, 2, 3, 4, 5]

输出:[120, 60, 40, 30, 24]
思考题:

能不能只使用常数空间?(除了输出的数组之外

思路:
维护前后缀即可

class Solution {
public:
    vector<int> multiply(const vector<int>& A) {
        int n = A.size();
        vector<int>ans(n,1);
        if(!n) return ans;
        
        int p = 1;
        for(int i = 1;i < n;i++) {
            p *= A[i - 1];
            ans[i] *= p;
        }
        p = 1;
        for(int i = n - 2;i >= 0;i--) {
            p *= A[i + 1];
            ans[i] *= p;
        }
        return ans;
    }
};
发布了844 篇原创文章 · 获赞 28 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/tomjobs/article/details/104976596