238. Product of Array Except Self
題目網址:https://leetcode.cn/problems/product-of-array-except-self/
題意:給一 array
nums
, 返回一 arrayanswer
, 其中answer[i]
為nums
中除了nums[i]
以外其餘元素的乘積, 乘積保證在 32-bit 整數的範圍內(不用考慮 overflow)。注意:請不要使用除法, 並在 $O(n)$ time 內解決此問題
進階:請設計 $O(1)$ space 的演算法, 其中 output array 不算額外空間
Solution 1:
想法:利用 prefix 和 postfix, 以
index = i
為分界,prefix[i]
記錄區間[0, i - 1]
之乘積,postfix[i]
記錄區間[i + 1, n - 1]
之乘積, 最後nums[i] = prefix[i] * postfix[i]
即為題目所求
- prefix:
prefix[i]
紀錄num[0] ~ nums[i - 1]
的乘積(由前往後填)- postfix:
postfix[n - i - 1]
紀錄nums[n - 1] ~ nums[n - i]
的乘積(由後往前填)- nums:
nums[i]
紀錄prefix[i] * postfix[i]
, 也就是除了位置i
剩餘其他數的乘積e.g.
nums = [1,2,3,4]
nums 1 2 3 4 prefix 1 1 2 6 postfix 24 12 4 1 nums 24 12 8 6
class Solution { |
- time:$O(n)$ ➔ 遍歷
nums
- space:$O(n)$ ➔
prefix
,postfix
Solution 2:
想法:改進 Solution 1, 將
prefix
直接儲存在res
中, 然後計算出postfix
後乘上對應的prefix
nums: [ 1, 2, 3, 4]
➔ res: [24, 12, 4, 1] // postfix 做完
➔ res: [24, 12, 8, 6] // prefix 做完
class Solution { |
- time:$O(n)$ ➔ 遍歷
nums
- space:$O(1)$ ➔ 撇除要返回的 output array
res
, 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論