給定乙個陣列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]。不能使用除法。
(注意:規定b[0] = a[1] * a[2] * ... * a[n-1],b[n-1] = a[0] * a[1] * ... * a[n-2];)
既然不能用乘法,分析題目,我們可以將乘積拆為兩項。即:
c[i]=a[0]*a[1]*…*a[i-1]
d[i]=a[i+1]*a[i+2]*…*a[n-1]
b[i]=c[i]*d[i]
我們先來計算c[i],使用數學歸納法:
c[0]=1
c[1]=a[0]
c[2]=a[0]*a[1]
c[3]=a[0]*a[1]*a[2]……..
我們可以得出規律:c[i] = c[i-1] * a[i -1](i >=1)
我們繼續用數學歸納法計算d[i]:
d[n-1]=1
d[n-2]=a[n-1]
d[n-3]=a[n-1]*a[n-2]
我們可以得出規律:d[i] = d[i + 1]* a[i + 1](i <= n-2)
functionmultiply(array)
res[0]=1
//計算c[i]
for(let i = 1; i < array.length; i++)
//計算d[i]
for(let j = array.length - 2, temp = 1; j >= 0; j--)
return
res}
劍指offer 陣列 構建乘積陣列
題目 構建乘積陣列 題目描述 給定乙個陣列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 不能使用除法。注意 規定b 0 a 1 a 2 a n 1 b n 1 a 0 a 1 a n 2 include include...
劍指Offer 陣列 構建乘積陣列
給定乙個陣列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 不能使用除法。注意 規定b 0 a 1 a 2 a n 1 b n 1 a 0 a 1 a n 2 對於a長度為1的情況,b無意義,故而無法構建,因此該情況不會...
構建乘積陣列
給定乙個陣列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 不能使用除法。思路 這題我原本的方法比較暴力,複雜度為o n 2 後參考劍指的方法,複雜度降為o n 涉及到這種容易重複計算的要考慮用空間記錄前列的結果 陣列乘...