构建乘积数组

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

题目分析:首先我们得看清楚了,矩阵A的的A[i]位置上面的元素没有参与运算,因此,我们将B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]看成两部分来计算,即:A[0]*A[1]*...*A[i-1]和 *A[i+1]*...*A[n-1]两部分的乘积就是B[i]。如下图的矩阵:


其中,下三角的每一行B[i]=A[i-1]*B[i-1];上三角计算B[i]之前,因为从低向上时,首先要将B[n-1]位置的置“1”,然后进行计算B[i]=A[i+1]*B[i]

代码实现如下:

1.

vector<int> multiply(const vector<int>& A) 
    {
        vector<int> B;
        if(A.empty())
            return B;
        
        int length=A.size();
        B.push_back(1);
        for(int i=1; i<length;i++)
        {
            B.push_back(A[i-1]*B[i-1]);
        }
        
        int tmp=1;
        for(int i=length-2; i>=0; i--)
        {
            tmp*=A[i+1];
            B[i]*=tmp;
        }
        
        return B;
    }

2.

void multiply(const vector<double>& array1, vector<double>& array2)
{
	int length1 = array1.size();
	int length2 = array2.size();

	if (length1 <= 0)
		return;

	if (length1 == length2&&length2 < 1)
	{
		array2[0] = 1;
		for (int i = 1; i < length1; i++)
		{
			array2[i] = array1[i - 1] * array2[i - 1];
		}

		double tmp = 1;
		for (int i = length1 - 2; i >= 0; i--)
		{
			tmp *= array1[i + 1];
			array2[i] *= tmp;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值