构建乘积数组

来源:互联网 发布:淘宝的主营类目怎么改 编辑:程序博客网 时间:2024/06/06 20:40

题目描述

给定一个数组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]。不能使用除法。

算法:
新的数组内是原数组所有数的乘积,但是除了第i位。

设数组内有五个数,新建两个变量或者数组。
第一个不断向前迭代累乘n-1次:
1,a[0],a[0]a[1],a[0]a[1]a[2],a[0]a[1]a[2]a[3]
第二个不断向后迭代累乘n-1次:
1,a[4],a[4]a[3],a[4]a[3]a[2],a[4]a[3]a[2]a[1]

class Solution {public:    vector<int> multiply(const vector<int>& A) {        vector<int> b;        if(A.size() == 0)            return b;        b.resize(A.size());        int end = A.size() - 1;        int tmp = 1;        //第一次前向累乘        b[0] = 1;        for(int i =0;i<A.size()-1;i++)        {            tmp *= A[i];            b[i+1] = tmp;        }        //第二次后向累乘        tmp = 1;        for (int i = end; i > 0; i--)        {            tmp *= A[i];            b[i-1] *= tmp;        }        return b;    }};
0 0
原创粉丝点击