product-of-array-except-self
This commit is contained in:
parent
d86e3334b1
commit
80245886a1
8
0238_product-of-array-except-self/NOTES.md
Normal file
8
0238_product-of-array-except-self/NOTES.md
Normal file
@ -0,0 +1,8 @@
|
||||
## What if we were allowed to use division?
|
||||
|
||||
Well, one might think that you can then find product(nums) and divide by nums[i] in the loop. But the problem with this approach is when there are 0s in the array. That causes the entire product to become zero.
|
||||
|
||||
So, we probably need to keep track of zero count and the first zero index.
|
||||
|
||||
1. If there are >1 zeroes, then the result would be all zeroes so.
|
||||
2. If there's only 1 zero, then we need to keep product excluding the zero to be kept. Then fill the result with all zeroes except for the 0 element's index which would equal the product.
|
25
0238_product-of-array-except-self/README.md
Normal file
25
0238_product-of-array-except-self/README.md
Normal file
@ -0,0 +1,25 @@
|
||||
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.)
|
25
0238_product-of-array-except-self/python3/solution.py
Normal file
25
0238_product-of-array-except-self/python3/solution.py
Normal file
@ -0,0 +1,25 @@
|
||||
from functools import reduce
|
||||
|
||||
class Solution:
|
||||
def productExceptSelf(self, nums: List[int]) -> List[int]:
|
||||
# We can divide this problem by finding the prefix and
|
||||
# postfix products of a given element and then multiplying
|
||||
# them together
|
||||
result = [0] * len(nums)
|
||||
|
||||
# Find prefix products, i.e, for ith element, store
|
||||
# product of 0 to a[i - 1]
|
||||
prefix = 1
|
||||
for i, num in enumerate(nums):
|
||||
result[i] = prefix
|
||||
prefix *= num
|
||||
|
||||
# Find suffix products by iterating from the last, and
|
||||
# combine them with prefix in the same step to reduce cost
|
||||
suffix = 1
|
||||
for i in range(len(nums) - 1, -1, -1):
|
||||
result[i] *= suffix
|
||||
suffix *= nums[i]
|
||||
|
||||
return result
|
||||
|
Loading…
Reference in New Issue
Block a user