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] == 0 的 answer[i] 會有值,其他都是 0,因為只有 answer[i] 不會乘到 0 (除了自己之外)
AC Code#
- 時間複雜度: $\mathcal{O}(n)$
- 空間複雜度: $\mathcal{O}(n)$