Leetcode 238 - Product of Array Except Self

題目

Problem#

給你一個整數陣列 nums,要你回傳答案陣列 answer[i] = nums[0] * ... * nums[i-1] * nums[i+1] * ... * nums[n-1] (也就是除了 nums[i] 之外的相乘)
時間複雜度必須在 $O(n)$。

測資限制#

  • $2 \le n \le 10^5$
  • $-30 \le val \le 30$

想法#

先算好全部相乘,對於 answer[i] 的計算,可以是 total / nums[i],這樣一來就可以不用每次都去重算 0 ~ n-1 除去 i 的乘積了。
唯一的例外就是只有出現一個 0 的狀況(如果出現兩個以上的 0 則答案都是 0),只有 nums[i] == 0answer[i] 會有值,其他都是 0,因為只有 answer[i] 不會乘到 0 (除了自己之外)

AC Code#

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(n)$