您好,登錄后才能下訂單哦!
小編給大家分享一下LeetCode如何構建乘積數組,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
給定一個數組 A[0,1,…,n-1],請構建一個數組 B[0,1,…,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。
class Solution:
def constructArr(self, a: List[int]) -> List[int]:
# 從左到右, 再從右向左遍歷
# 維護前綴積數組, 從右向左遍歷時只需要維護后綴積即可, 然后乘以前一個前綴積, 其結果即為當前元素的左右元素乘積
lefts = []
left = 1
for x in a:
left *= x
lefts.append(left)
# 這里只需要維護后綴積, 沒必要再建立一個后綴積數組
right = 1
res = [0] * len(a)
for i in range(len(a))[::-1]:
# 注意下標為0時左側沒有元素, 此時左側部分乘積置為1
left = lefts[i - 1] if i > 0 else 1
res[i] = left * right
# 注意當前元素處理完之后再乘以它, 因為結果是不包含當前元素自身的
right *= a[i]
return res
以上是“LeetCode如何構建乘積數組”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。