LeetCode Medium 238 非己位置乘积 Python

本文介绍了一种不使用除法计算数组中除自身外其他元素乘积的算法。通过两次遍历数组,先从左到右计算左侧元素乘积,再从右到左计算右侧元素乘积,最终得到每个元素对应的乘积。
def productExceptSelf(self, nums):
    """
    My Method (part from disscussion)
    算法:左右两次遍历
    思路:
        !!首先要注意不能用除法,所以乖乖地按题意来
        理解题意:
            除了自己的乘积,就是当前curr的左侧的乘积去乘右侧的乘积,所以先从左到右乘一遍,再从右到左乘一遍
            先从左到右遍历一遍,result记录每个位置i处的从[0:i]的左侧位置的所有元素的乘积
            再从右到左遍历一遍,更新result[i]为左侧的乘积乘右侧的乘积,这个时候因为result[i]内已经有数字了,
            所以要单独用一个right_product记录右侧数字的乘积,然后到了每个i位置后更新right_product
    复杂度分析:
        时间:ON,两次单层for
        空间:O1,常数级
    """
    result = [0] * len(nums)

    result[0] = 1
    for i in range(1, len(nums)):
        result[i] = result[i - 1] * nums[i - 1]
    right_product = 1
    for j in range(len(nums) - 1, -1, -1):
        result[j] = result[j] * right_product
        right_product *= nums[j]
    return result

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值