剑指offer--(15)构建乘积数组--Java描述

写在前面:

    这道题,我们首先要掌握乘积的规律

(1)B[0] = A[1] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[0])

(2)B[1] = A[0] * A[2] * A[3] * A[4] *....*A[n-1] ;(没有A[1])

(3)B[2] = A[0] * A[1] * A[3] * A[4] *....*A[n-1] ;(没有A[2])

    也就是说,B[i]=数组A所有项的乘积,除了A[i]

    这样,我们就可以构造出一个矩阵,由上三角和下三角组成。先计算出下三角的乘积,再计算上三角的乘积,即为B数组每个元素的值。

搜索:

B[0]1A[1]A[2]。。。A[n-2]A[n-1]
B[1]A[0]1A[2]。。。A[n-2]A[n-1]
B[2]A[0]。。。1。。。A[n-2]A[n-1]
。。。A[0]A[1]。。。1A[n-2]A[n-1]
B[n-2]A[0]A[1]A[2]A[n-3]1A[n-1]
B[n-1]A[0]A[1]A[2]A[n-3]A[n-2]1

代码实现如下:

public int[] multiply(int[] A) {

		int length = A.length;
		int[] B = new int[length];
		if (length != 0) {

			B[0] = 1;
			// 先计算下三角的值
			for (int i = 1; i < length; i++) {
				B[i] = B[i - 1] * A[i - 1];
			}
			int temp = 1;
			// 再计算上三角的值
			for (int j = length; j >= 0; j--) {
				temp = temp * A[j + 1];
				B[j] = temp * B[j];
			}
		}
		return B;

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值