美文网首页Leetcode
238. Product of Array Except Sel

238. Product of Array Except Sel

作者: oo上海 | 来源:发表于2016-07-28 00:58 被阅读64次

    238. Product of Array Except Self

    题目:
    https://leetcode.com/problems/product-of-array-except-self/

    难度:

    Medium

    不使用division 并且O(n)

    想到的算法 O(n^2)

    会超时

    class Solution(object):
            def productExceptSelf(self,nums):
                """
                :type nums: List[int]
                :rtype: List[int]
                """
                lst = []
                for i in range(len(nums)):
                    lst.append(self.productWithoutI(nums,i))
                return lst
            
    
            def productWithoutI(self,nums,i):
                product = 1
                for j in range(len(nums)):
                    if j != i:
                        product *= nums[j]
                return product
    

    如果用除法,也会有问题,如果有0出现也会变繁琐。

    谷歌一下:

    解法还是很棒的

    output[i] =  { i 前面的数的乘积}  X  { i 后面的数的乘积}
    
    class Solution(object):
            def productExceptSelf(self,nums):
                """
                :type nums: List[int]
                :rtype: List[int]
                """
                if nums == [] : return []  
                lft = [1]
                rgt = [1]
                product = 1 
                for i in range(1,len(nums)):
                    product *= nums[i-1]
                    lft.append(product)
                product = 1 
                for i in reversed(range(1,len(nums))):
                    product *= nums[i]
                    rgt.append(product)
                rgt.reverse()
                result = []
                for i in range(len(nums)):
                    result.append(lft[i]*rgt[i])
                return result
                
    

    空间O(n),再看到满足要求的“标准解法”

    class Solution(object):
            def productExceptSelf(self,nums):
                """
                :type nums: List[int]
                :rtype: List[int]
                """
                if nums == [] : return []  
                size = len(nums)
                output = [1] * size
                left = 1
                for x in range(size-1):
                    left *= nums[x]
                    output[x+1] *= left
                right = 1
                for x in range(size - 1, 0, -1):
                    right *= nums[x]
                    output[x-1] *= right
                return output
    

    相关文章

      网友评论

        本文标题:238. Product of Array Except Sel

        本文链接:https://www.haomeiwen.com/subject/npqajttx.html