美文网首页
剑指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