美文网首页
剑指offer 74- 构建乘积数组

剑指offer 74- 构建乘积数组

作者: 顾子豪 | 来源:发表于2021-06-10 01:47 被阅读0次

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

思考题:
能不能只使用常数空间?(除了输出的数组之外)

分析:
可以分两部分来算
B1 =A[0]*A[1]*…*A[i-1], left[i]=A[i-1]
B2 *= A[i+1]*A[i+2]*…*A[n-1]

时间复杂度:O(n)

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

相关文章

网友评论

      本文标题:剑指offer 74- 构建乘积数组

      本文链接:https://www.haomeiwen.com/subject/cscxsltx.html