From ade978c89c3b5fe3c9a60e1e7f5fb90f3aba2cc4 Mon Sep 17 00:00:00 2001 From: ImAlpha Date: Thu, 17 Aug 2023 02:04:49 -0700 Subject: [PATCH] Beats 80% of runtime, uses a lot of memory. multiples loops is still O(n) --- .../238_Product_of_Array_Except_Self.py | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/NeetCodeRoadmap/Arrays_and_Hashing/238_Product_of_Array_Except_Self.py b/NeetCodeRoadmap/Arrays_and_Hashing/238_Product_of_Array_Except_Self.py index 97adbdb..8297019 100644 --- a/NeetCodeRoadmap/Arrays_and_Hashing/238_Product_of_Array_Except_Self.py +++ b/NeetCodeRoadmap/Arrays_and_Hashing/238_Product_of_Array_Except_Self.py @@ -1,19 +1,43 @@ -from functools import reduce -import operator +# from functools import reduce +# import operator + + +# def productExceptSelf(nums): +# """ +# :type nums: List[int] +# :rtype: List[int] +# """ +# final = [] +# for x in range(len(nums)): +# temp = nums[0] +# del nums[0] +# final.append(reduce(operator.mul, nums)) +# # print(nums) +# nums.append(temp) +# # print(final) +# return final +# print(productExceptSelf([1,2,3,4])) def productExceptSelf(nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - final = [] - for x in range(len(nums)): - temp = nums[0] - del nums[0] - final.append(reduce(operator.mul, nums)) - # print(nums) - nums.append(temp) - # print(final) - return final -print(productExceptSelf([1,2,3,4])) \ No newline at end of file + n = len(nums) + prefix_products = [1] * n + suffix_products = [1] * n + result = [1] * n + + prefix_product = 1 + for i in range(n): + prefix_products[i] = prefix_product + prefix_product *= nums[i] + + suffix_product = 1 + for i in range(n - 1, -1, -1): + suffix_products[i] = suffix_product + suffix_product *= nums[i] + + for i in range(n): + result[i] = prefix_products[i] * suffix_products[i] + + return result + +print(productExceptSelf([1, 2, 3, 4]))