剑指Offer 66. 构建乘积数组
1. 题目描述
给定一个数组A[0,1,…,n-1]
,请构建一个数组B[0,1,…,n-1]
,其中B[i]
的值是数组A
中除了下标i
以外的元素的积, 即B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]
。不能使用除法。
示例:
输入: [1,2,3,4,5] |
提示:
所有元素乘积之和不会溢出32
位整数 a.length <= 100000
来源:力扣(LeetCode)
2. 算法思路
乘积数组可以用一个表格表示:
A[0] |
A[1] |
... |
A[n-2] |
A[n-1] |
|
---|---|---|---|---|---|
B[0] |
1 | A[1] |
... |
A[n-2] |
A[n-1] |
B[1] |
A[0] |
1 | ... |
A[n-2] |
A[n-1] |
... |
... |
... |
... |
A[n-2] |
A[n-1] |
B[n-2] |
A[0] |
A[1] |
... |
1 | A[n-1] |
B[n-1] |
A[0] |
A[1] |
... |
A[n-2] |
1 |
其中B[i]
的值是每一行的乘积。易见,我们只需分别从上三角自下而上、下三角自上而下循环乘A[i]
即可。
class Solution { |
算法效率
- 时间复杂度:
。 - 空间复杂度:
。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿日哥的向量空间!