66.构建乘积数组
大约 1 分钟
66.构建乘积数组
参考链接
LCR 191. 按规则计算统计结果 - 力扣(LeetCode)
zhedahht/CodingInterviewChinese2: 《剑指Offer:名企面试官精讲典型编程面试题》第二版源代码
优秀题解
class Solution {
public int[] statisticalResult(int[] arrayA) {
int len = arrayA.length;
if(len == 0) return new int[0];
int[] arrayB = new int[len];
arrayB[0] = 1;
int tmp = 1;
for(int i = 1; i < len; i++) {
arrayB[i] = arrayB[i - 1] * arrayA[i - 1];
}
for(int i = len - 2; i >= 0; i--) {
tmp *= arrayA[i + 1];
arrayB[i] *= tmp;
}
return arrayB;
}
}
作者:Krahets
链接:https://leetcode.cn/problems/gou-jian-cheng-ji-shu-zu-lcof/solutions/208840/mian-shi-ti-66-gou-jian-cheng-ji-shu-zu-biao-ge-fe/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
个人理解:
从总体排除第 i 位后的其他元素的相乘
array[0] | array[1] | array[2] | array[3] | array[4] | |
---|---|---|---|---|---|
i = 0 | 1 | 4 | 6 | 8 | 10 |
i = 1 | 2 | 1 | 6 | 8 | 10 |
i = 2 | 2 | 4 | 1 | 8 | 10 |
i = 3 | 2 | 4 | 6 | 1 | 10 |
i = 4 | 2 | 4 | 6 | 8 | 1 |
沿着二维数组的斜线(i , i),可将其分为上三角和下三角
i | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
arrayA[i] | 2 | 4 | 6 | 8 | 10 |
arrayB[i] | 1 | 1*2 | 1 * 2 *4 | 1 * 2 *4 * 6 | 1 * 2 *4 * 6 * 8 |
arrayC[i] | 1 * 10 * 8 * 6 * 4 | 1 * 10 * 8 * 6 | 1 * 10 * 8 | 1 * 10 | 1 |
arrayD[i] | arrayB[i] * arrayC[i] | arrayB[i] * arrayC[i] | arrayB[i] * arrayC[i] | arrayB[i] * arrayC[i] | arrayB[i] * arrayC[i] |