238.除自身以外数组的乘积|两次遍历:左边累乘*右边累乘

本文介绍了一种解决除自身以外数组乘积问题的算法,通过双指针技巧,常数级空间复杂度和O(n)时间复杂度下避免使用除法,详细展示了如何分别计算数组左右乘积并累乘的过程。

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

238/

  • 常数级别的空间复杂度、O(n)时间复杂度、不用除法
  • 除法-》一开始就乘1
  • 遍历两遍,1、计算当前数左边的乘积 2、计算当前数右边的乘积 3、累乘

在这里插入图片描述

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        # 
        nlen = len(nums)
        res = [1] * nlen
        tmp = 1
        # 遍历两遍
        
        # 1、计算当前数左边的乘积m1
        for i in range(1, nlen): # 顺序累乘
            res[i] = res[i-1] * nums[i-1]
        # 注意i=0时,相当于左边没有数了,不用乘,在乘法中也就相当于乘1
        print(res)
        
        # 2、计算当前数右边的乘积m2,3、累乘到m1上
        # 题目提示中表明,nums.length>=2
        for j in range(nlen-2, -1, -1):# 倒序累乘
            tmp *=  nums[j+1] # 2.1 右边乘积
            res[j] *= tmp # 2.2 累乘到m1上
        print(res)
        return res
        

参考这个链接下的评论和代码:除自身以外数组的乘积(上三角,下三角)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值