劍指offer系列 51 構建乘積陣列

2022-06-24 09:48:11 字數 1051 閱讀 6437

q:給定乙個陣列\(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:解釋下**,設有陣列大小為5。

對於第乙個for迴圈

第一步:\(b[0] = 1\);

第二步:\(b[1] = b[0] * a[0] = a[0]\);

第三步:\(b[2] = b[1] * a[1] = a[0] * a[1]\);

第四步:\(b[3] = b[2] * a[2] = a[0] * a[1] * a[2]\);

第五步:\(b[4] = b[3] * a[3] = a[0] * a[1] * a[2] * a[3]\);

然後對於第二個for迴圈

第一步\(temp *= a[4] = a[4]\);

\(b[3] = b[3] * temp = a[0] * a[1] * a[2] * a[4]\);

第二步\(temp *= a[3] = a[4] * a[3]\);

\(b[2] = b[2] * temp = a[0] * a[1] * a[4] * a[3]\);

第三步\(temp *= a[2] = a[4] * a[3] * a[2]\);

\(b[1] = b[1] * temp = a[0] * a[4] * a[3] * a[2]\);

第四步\(temp *= a[1] = a[4] * a[3] * a[2] * a[1]\);

\(b[0] = b[0] * temp = a[4] * a[3] * a[2] * a[1]\);

由此可以看出從b[4]到b[0]均已經得到正確計算。

vectormultiply(const vector&a) 

return result;

}

劍指offer系列 51 構建乘積陣列

給定乙個陣列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無意義,故而無法構建,因此該情況不會...

劍指offer 51 構建乘積陣列

給定乙個陣列a 0,1,n 1 請構建乙個陣列b 0,1,n 1 其中b中的元素b i a 0 x a 1 x x a i 1 x a i 1 x x a n 1 不能使用除法。由題目可知b i a 0 x a 1 x x a n 1 a i 題目裡面不能用除法 計算右邊的三角 也就是d i int...

劍指offer 51 構建乘積陣列

不能使用除法,那麼就構建兩個陣列 陣列1 larr,第一位是1,其餘位的數是a0a1 ai 1 陣列2 rarr,最後一位是1,其餘位是ai 1ai 2 an 1 最後返回b,b的每一位是larr i rarr i class solution def multiply self,a write c...