Given an integer array
nums, return an array
answer such that
answer[i] is equal to the product of all the elements of
The product of any prefix or suffix of
nums is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs in
O(n) time and without using the division operation.
Input: nums = [1,2,3,4] Output: [24,12,8,6]
Input: nums = [-1,1,0,-3,3] Output: [0,0,9,0,0]
2 <= nums.length <= 105
-30 <= nums[i] <= 30
- The product of any prefix or suffix of
numsis guaranteed to fit in a 32-bit integer.
Follow up: Can you solve the problem in
O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)
We can use two passes to get the final result. One pass is to get products before each number, another pass is to get products after each number.
class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: before_product = [1 for i in range(len(nums))] after_product = [1 for i in range(len(nums))] for i in range(1, len(nums)): before_product[i] = before_product[i - 1] * nums[i - 1] for i in range(len(nums) - 2, -1, -1): after_product[i] = after_product[i + 1] * nums[i + 1] results =  for p1, p2 in zip(before_product, after_product): results.append(p1 * p2) return results
- Time complexity: O(N).
- Space complexity: O(N).