Problem link: https://leetcode.com/problems/product-of-array-except-self/
Description (copied from above link)
Given an integer array nums
, return an array answer
such that answer[i]
is equal to the product of all the elements of nums
except nums[i]
.
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.
Example 1:
Input: nums = [1,2,3,4] Output: [24,12,8,6]
Example 2:
Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]
Constraints:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
- The product of any prefix or suffix of
nums
is 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.)
Solution: (link)
Intuition
Approach
- Find product of all elements using a loop and call it full_product.
- Divide full_product by each element to remove it from product and append to result
- During the process of full_product calculation, count the number of zeroes. If its more than 1, then all the elements of result array will be zeroes
- If only one zero is found in input array, do not multiple the full_product with that zero. The product of all remaining elements will be in that position only. All remaining positions will be zeroes
Complexity
Time complexity: O(2n) --> O(n) in worst case
Space complexity: O(1) --> Result array not included
Code
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
zeroes = 0
full_product = 1
for idx, i in enumerate(nums):
if i == 0:
zeroes += 1
if zeroes > 1:
return [0] * len(nums)
position = idx
else:
full_product *= i
if zeroes:
result = [0] * len(nums)
result[position] = full_product
else:
result = [full_product//i for i in nums]
return result
If you enjoyed this post, make sure you subscribe to my RSS feed! Comments are encouraged
No comments:
Write comments