Array of products

refer to: https://www.algoexpert.io/questions/Array%20Of%20Products


Problem Statement

Sample input

Analysis

approach 1: brute force, two full loops to iterate the array, for each current index, calculate the product except the current index value

code. time complexity: O(N^2).  space complexity: O(N)

def arrayOfProducts(array):
    # Write your code here.
    product = [1 for i in range(len(array))]
    for i in range(len(array)):
        res = 1
        for j in range(len(array)):
            if i != j:
                res *= array[j]
        product[i] = res
    return product     

approach 2: calculate the leftProducts and the rightProducts seperately, then multiple the right and left element of the current index

code.  time complexity: O(N).  space complexity: O(N)

def arrayOfProducts(array):
    # Write your code here.
    left = [1 for i in range(len(array))]
    right = [1 for i in range(len(array))]
    res = [1 for i in range(len(array))]
    
    leftProduct = 1
    rightProduct = 1
    for i in range(len(array)):
        left[i] = leftProduct
        leftProduct *= array[i]
        
    for i in reversed(range(len(array))):
        right[i] = rightProduct
        rightProduct *= array[i]
        
    for i in range(len(array)):
        res[i] = right[i] * left[i]
    return res

approach 3: avoid store the extra leftProducts and rightProducts, only update the products array

code.  time complexity: O(N).  space complexity: O(N)

def arrayOfProducts(array):
    # Write your code here.
    product = [1 for i in range(len(array))]
    
    leftProduct = 1
    rightProduct = 1
    
    for i in range(len(array)):
        product[i] = leftProduct
        leftProduct *= array[i]
        
    for i in reversed(range(len(array))):
        product[i] *= rightProduct
        rightProduct *= array[i]
        
    return product
原文地址:https://www.cnblogs.com/LilyLiya/p/15025857.html