劍指 Offer 66 構建乘積陣列(對稱遍歷)

2021-10-21 02:11:13 字數 930 閱讀 2875

難度:中等

給定乙個陣列 a[0,1,…,n-1],請構建乙個陣列 b[0,1,…,n-1],其中 b[i]的值是陣列 a 中除了下標 i 以外的元素的積, 即 b[i]=a[0]×a[1]×…×a[i-1]×a[i+1]×…×a[n-1]。不能使用除法。

例如:

輸入: [1,2,3,4,5]

輸出: [120,60,40,30,24]

解題思路:

這道題只需要遍歷兩次,一次求出所有index之前的乘積,一次求出所有index之後的乘積,然後兩部分乘積對應相乘,得到最終的結果。

python**:

# 對稱遍歷

class

solution

:def

constructarr

(self, a: list[

int])-

> list[

int]

: arr =[1

]*len(a)

for i in

range(1

,len

(a))

: arr[i]

= arr[i-1]

*a[i-1]

tmp =

1for i in

range

(len

(a)-2,

-1,-

1): tmp *= a[i+1]

arr[i]

*= tmp

return arr

複雜度分析:

劍指Offer 66 構建乘積陣列

給定乙個陣列a 0,1,2,3,n 1 請構建乙個陣列b 0,1,2,3,n 1 條件為b i a 0 a 1 a 2 a i 1 a i 1 a n 1 限制 不能使用除法 也就是說b i 等於 a 陣列中除a i 以外的其他所有元素之積 思路1 先來舉例分析一下 例如陣列a 元素個數n 5 b ...

劍指offer 66 構建乘積陣列

給定乙個陣列a,構建乙個陣列 b,其中b中的元素b i a 0 xa 1 x a i 1 xa i 1 x a n 1 不能a使用除法。對於這道題,由於不能使用除法,可以把b i a 0 xa 1 x a i 1 xa i 1 x a n 1 看成是a 0 xa 1 x a i 1 和a i 1 x...

劍指 Offer 66 構建乘積陣列

劍指 offer 66.構建乘積陣列 給定乙個陣列 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 不能使用除法。示例 輸入 1,2,3,4,5 輸出 120,60,40,30,24 所有元素乘積之和不會溢位 3...