Description:
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]
Solution: prefix product * suffix product
- Calculate Left Products: During the first pass, calculate the product of all elements to the left of each element and update the result array accrodingly.
- Calculate Right products: During the second pass, calculate the product of all elements to the right of each element and update the result array with the final result.
prefix product * suffix product = Product Of Array Except Self
fun productExceptSelf(nums: IntArray): IntArray {
val outputArray = IntArray(nums.size)
var productBefore = 1
for (index in nums.indices) {
// calculate left products
outputArray[index] = productBefore
productBefore *= nums[index]
}
var productAfter = 1
for (index in nums.indices.reversed()) {
// calculate left products * right products
outputArray[index] *= productAfter
productAfter *= nums[index]
}
return outputArray
}