package LeetCode_238
/**
* 238. Product of Array Except Self
* https://leetcode.com/problems/product-of-array-except-self/description/
* Given an array nums of n integers where n > 1,
* return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Example:
Input: [1,2,3,4]
Output: [24,12,8,6]
Constraint: It's guaranteed that the product of the elements of any prefix or suffix of the array(including the whole array) fits in a 32 bit integer.
Note: Please solve it without division and in O(n).
Follow up:
Could you solve it with constant space complexity?
(The output array does not count as extra space for the purpose of space complexity analysis.)
* */
class Solution {
/*
* solution 1: prefix_array and suffix_array, Time complexity:O(n), Space complexity:O(n);
* solution 2: Time complexity:O(n), Space complexity:O(1);
* */
fun productExceptSelf(nums: IntArray): IntArray {
//solution 2:
val n = nums.size
val result = IntArray(n)
var leftProduct = 1
for (i in nums.indices) {
result[i] = leftProduct
leftProduct *= nums[i]
}
var rightProduct = 1
for (i in n-1 downTo 0){
result[i] *= rightProduct
rightProduct *= nums[i]
}
return result
}
}