CPP之劍指 Offer 66 構建乘積陣列

2021-10-08 00:26:02 字數 749 閱讀 2817

給定乙個陣列 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]。不能使用除法。

根據題目描述,函式名是constructarr,函式輸入是vector& a,返回值應當是新的陣列 vector ret。

陣列a中的元素對應a[i],返回值陣列ret中元素對應題目中的b[i],則有

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

我們可以把右邊連乘拆分為兩部分,前半部分是a[0]×a[1]×…×a[i-1],後半部分是a[i+1]×…×a[n-1]。顯然b[i]等於a[i]左邊所有的元素值乘積乘以a[i]右邊的所有元素乘積

分析到這裡,我們的解法就是,遍歷兩遍原陣列,第一次正著遍歷,儲存a[i]左邊所有的元素值乘積到

b[i]中,即ret[i]中,然後再反著遍歷一遍,將a[i]右邊的所有元素乘積與第一遍歷時的值ret[i]相乘。

需要注意的是,相乘的時候要錯位。

class

solution

int right =1;

for(

int i = n-

1; i >=

0; i--

)return ret;}}

;

劍指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...