剑指offer--(15)构建乘积数组--Java描述
2018-02-24 18:21
323 查看
写在前面:
这道题,我们首先要掌握乘积的规律
(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数组每个元素的值。
搜索:
代码实现如下: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;
}
这道题,我们首先要掌握乘积的规律
(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] | 1 | A[1] | A[2] | 。。。 | A[n-2] | A[n-1] |
B[1] | A[0] | 1 | A[2] | 。。。 | A[n-2] | A[n-1] |
B[2] | A[0] | 。。。 | 1 | 。。。 | A[n-2] | A[n-1] |
。。。 | A[0] | A[1] | 。。。 | 1 | A[n-2] | A[n-1] |
B[n-2] | A[0] | A[1] | A[2] | A[n-3] | 1 | A[n-1] |
B[n-1] | A[0] | A[1] | A[2] | A[n-3] | A[n-2] | 1 |
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;
}
相关文章推荐
- 剑指Offer 52题 构建乘积数组 Java版
- 剑指Offer面试题52:构建乘积数组 Java实现
- 剑指offer--(14)数组中重复的数字--Java描述
- 剑指offer52题(构建乘积数组)
- 剑指offer:构建乘积数组
- 剑指offer—构建乘积数组
- 剑指Offer-66:构建乘积数组
- 剑指offer-构建乘积数组-php
- 剑指Offer_51_构建乘积数组
- (C++)剑指offer-51:构建乘积数组(数组)
- 剑指Offer:构建乘积数组
- 剑指offer:构建乘积数组
- 剑指offer-构建乘积数组
- 剑指offer-51.构建乘积数组
- 剑指offer 面试题52 构建乘积数组
- 【剑指offer】题52:构建乘积数组
- 剑指offer 52题 【数组】 构建乘积数组
- 剑指offer_数组---构建乘积数组
- 剑指offer之构建乘积数组
- 牛客网剑指offer-构建乘积数组