前言
你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴!
1. 题目描述
【难易度:中等】
给你一个长度为 n
的整数数组 nums
,其中 n > 1
,返回输出数组 output
,其中 output[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积。
提示: 题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
示例 1:
输入: [1,2,3,4]
输出: [24,12,8,6]
2. 代码实现
- Python3 实现
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
# 上三角、小三角问题
# 1.列表长度
n = len(nums)
# 2.初始化结果集
result = [0]*n
# 3.result[i] 表示索引 i 左侧所有元素的乘积,开始为1
result[0] = 1
for i in range(1, n):
result[i] = nums[i - 1] * result[i - 1]
# 4.右侧所有元素的乘积
R = 1
for i in range(n-1, -1, -1):
# 5.对于索引 i,左边的乘积为 result[i],右边的乘积为 R
result[i] = result[i] * R
# 6.计算下一个结果时需要将当前值乘到 R 上
R *= nums[i]
return result
注意: 时间、空间复杂度要求,不能用嵌套循环哦~
3. 运行结果
4. 题目链接
后语
- 原创内容,转载说明出处哦!
- 以上内容本人整理,亲测可行,如有任何问题,敬请指正,谢谢~~
- 点赞、收藏、也欢迎打赏,我弹钢琴你听呀~~哈哈!