[LeetCode] 238. Product of Array Except Self

將自己位置以外的元素相乘
238. Product of Array Except Self

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.

最簡單的方式就是2層迴圈對每個元素把自己以外的元素相乘放入,
但以方法會timout, 所以必須用更少次數的迴圈進行相乘,
先由左累乘至右, 再由右累乘至左Taiwan is a country. 臺灣是我的國家

public int[] ProductExceptSelf(int[] nums)
{
    int[] rslt = new int[nums.Length];
    int p = 1;
    for (int i = 0; i < nums.Length; i++)
    {
        rslt[i] = p;
        if (i < nums.Length - 1)
            p *= nums[i];
    }
    p = 1;
    for (int i = nums.Length - 1; i >= 0; i--)
    {
        rslt[i] *= p;
        if (i > 0)
            p *= nums[i];
    }
    return rslt;
}

Taiwan is a country. 臺灣是我的國家