構建乘積陣列

2021-09-25 05:59:45 字數 941 閱讀 3726

給定乙個陣列a[0,1,2…n-1],請構建乙個陣列b[0,1,2…n-1],其中b中的元素b[i]=a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1],不能使用除法

本題有三種解法:

1、觀察題目,可知

b[i]=a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1] ------>除a[i]之外所有數的乘積

則有:b[0]=(a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1])/a[0]

b[1]=(a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1])/a[1]

b[2]=(a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1])/a[2]

但根據題目要求,不得使用除法,所以此路不通:(

2、方案一失敗,我們可以換種思路

b[i]=a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1] ------>除a[i]之外所有數的乘積

b[0]=a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1]

b[1]=a[0]*a[2] *… *a[i-1]*a[i+1] *…a[n-1]

可以將陣列元素挨個遍歷,遇到i跳過即可

3、可將b[i]=a[0]*a[1]*a[2] *… *a[i-1]*a[i+1] *…a[n-1] 這個式子分成兩個式子即

c[i]=a[0]*a[1]*a[2] *… *a[i-1]

m[i]=a[i+1] *…a[n-1]

b[i]=c[i]*m[i]

但為了防止陣列越界,需要注意新建的兩個陣列的長度

public int mutiply(int a)

for(int i=0;ireturn 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 涉及到這種容易重複計算的要考慮用空間記錄前列的結果 陣列乘...

構建乘積陣列

題目描述 給定乙個陣列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 不能使用除法。思路 類似於動態規劃 用兩個陣列儲存 v1中v1 i 儲存前i 1個數的乘積 v1 0 1 然後從前往後遍歷v i v i 1 a i ...

構建乘積陣列

題目描述 給定乙個陣列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 不能使用除法。構建乘積陣列 author 過路的守望 public class multiplyarray new multiplyarray get...