机试打卡 -11 数组的乘积(前缀和)


思路:“除自身以外的数组的乘积”可以转化为求该元素的前缀积和后缀积,即先遍历两遍数组,得到前缀积数组和后缀积数组,第三次遍历即将前缀积数组和后缀积数组按位相乘。

class Solution:
    def productExceptSelf(self, nums: List[int]) -> List[int]:
        
        nums_len=len(nums)

        ans_list=[]

        # answer[i]=prefix[i-1]*suffix[i+1]

        # 前缀积 prefix
        pre=[]

        for i in range(nums_len):
            if i:
                pre.append(pre[-1]*nums[i-1])
            else:
                pre.append(1)

        # 后缀 suffix
        suf=[]

        for j in range(nums_len-1,-1,-1):
            if j==nums_len-1:
                suf.append(1)
            else:
                suf.append(nums[j+1]*suf[-1])
        
        # 后缀倒序
        suf=suf[::-1]
        
        for a in range(nums_len):
                ans_list.append(pre[a]*suf[a])
        
        return ans_list

前缀 prefix

后缀 suffix

注意:后缀suffix 需倒序排列

# 后缀倒序
suf=suf[::-1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值