劍指51 構建乘積陣列

2022-06-08 03:12:07 字數 715 閱讀 2779

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

不能用除法,正常連乘的話時間複雜度為0(n^2)

可以發現:

b[i]的左下三角和b[i-1]有關(將b[i]的左半部分乘積看成c[i],有c[i]=c[i-1]*a[i-1])

b[i]的右上三角與b[i+1]有關(將b[i]的右半部分乘積看成d[i],有d[i]=d[i+1]*a[i+1])

因此,可以先算 下三角 中的連乘,這樣求得b[i] 的一部分,然後倒過來利用 上三角 計算b[i] 另一部分。

public

class

solution

//計算上三角

int temp = 1;

for (int j = a.length - 2; j >= 0; j--)

return

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 不能使用除法。樣例輸入 1,2,3,4,5 輸出 120,60,40,30,24 思考題 把 b 的每個元素b i 看成兩半的乘積,即a 0 xa 1 x.xa...

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