• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LilyLiya
博客园    首页    新随笔    联系   管理    订阅  订阅
Array of products
leftProduct array and rightProduct array

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

 

posted on 2021-07-18 09:18  LilyLiya  阅读(73)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3