LeetCode百题【除自身以外数组的乘积】
题目描述
给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法, 且在 O(_n_)
时间复杂度内完成此题。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
2 <= nums.length <= 10^5
-30 <= nums[i] <= 30
- 保证 数组
nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内
进阶: 你可以在 O(1)
的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)
解法
- 前后缀之积
- 前缀:索引元素前的所有元素
- 后缀:索引元素后的所有元素
- 结果:前缀之积*后缀之积
- 动态转移方程
- 定义left,right分别为前缀之积和后缀之积(不包括当前元素的乘积),有动态转移方程如下
L[i] = L[i-1] * nums[i-1] (L[0]=1)
R[i] = R[i+1] * nums[i+1] (R[length-1]=1)
1 |
|
- 时间复杂度:O(n)
来源:力扣(LeetCode)
链接:238. 除自身以外数组的乘积 - 力扣(LeetCode)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 漫漫长夜!