每日一道算法题--leetcode 238--除自身以外数组的乘积--python

【题目描述】

【代码思路】

这道题主要是题干有要求,一是不允许使用除法,这就打消了我先求出数组累乘之积,再除以各个nums[i]的念头。二是要求时间复杂度是线性的,因此不可以双层循环嵌套。

因此考虑左数组和右数组,左数组保存的是nums[i]之前的所有元素之积,右数组保存的是nums[i]之后的所有元素之积,这样一来,求output[i]就可以直接用相应位置的左右数组相乘即可了。这个方法的时间复杂度是线性的,空间复杂度为O(1),只需要一个保存num变量的存储空间即可。

这里说一下,实现对应位置左右数组相乘的方式,用到了python 中的map函数和zip函数。

left=[1,2]
right=[3,4]
output=list(map(lambda x:x[0]*x[1],list(zip(left,right ))))
复制代码

【源代码】

class Solution(object):
    def productExceptSelf(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        left=[]
        right=[]
        num=1
        for i in range(len(nums)):
            left.append(num)
            num*=nums[i]
        num=1
        for i in reversed(range(len(nums))):
            right.append(num)
            num*=nums[i] 
        return map(lambda (x,y):x*y,zip(left,reversed(right) ))
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值