《python算法与数据结构2000讲》0238. 除自身以外数组的乘积

本文介绍如何在O(n)时间复杂度和常数空间内解决《python算法与数据结构2000讲》第0238题,即计算数组中每个元素除自身以外的乘积。通过两次遍历数组,分别累积左右两侧的乘积,避免使用除法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《python算法与数据结构2000讲》0238. 除自身以外数组的乘积

  • 标签:数组
  • 难度:中等

题目大意

给定一个数组 nums。要求输出数组 output,其中 output[i] 为数组 nums 中除了 nums[i] 之外的其他所有元素乘积。

要求不能使用除法,且在 O(n) 时间复杂度、常数空间复杂度内解决问题。

解题思路

构造一个答案数组 res,长度和数组 nums 长度一致。先从左到右遍历一遍 nums 数组,将 nums[i] 左侧的元素乘积累积起来,存储到 res 数组中。再从右到左遍历一遍,将 nums[i] 右侧的元素乘积累积起来,再乘以原本 res[i] 的值,即为 nums 中除了 nums[i] 之外的其他所有元素乘积。

代码

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        size = len(nums)
        res = [1 for _ in range(size)]

        left = 1
        for i in range(size):
            res[i] *= left
            left *= nums[i]

        right = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT狂飙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值