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]))