[Leetcode]0238.ProductOfArrayExceptSelf

75 阅读1分钟

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
}