1. 程式人生 > >劍指offer之構建乘積陣列

劍指offer之構建乘積陣列

1.題目描述

給定一個數組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]。不能使用除法。

2.問題描述

假設:

//   1  a2 a3 a4
//   a1  1 a3 a4
//   a1 a2  1 a4
//   a1 a2 a3  1

可以看出來,這個陣列B分成兩部分,分別是左下角和右上角。先計算左下角的連乘,再計算右上角連乘,迴圈兩次就可以的到陣列B的值。

3.原始碼

vector<int> multiply(const vector<int
>& A) { int size = A.size(); if(size == 0) return vector<int>(); vector<int> B(size, 1); // 1 a2 a3 a4 // a1 1 a3 a4 // a1 a2 1 a4 // a1 a2 a3 1 //左下半區,i是下標 int temp = 1; for(int i = 1; i < size; ++i) { temp *= A[i - 1
]; B[i] = temp; } //右上半區 temp = 1; for(int i = size - 2; i >= 0; --i) { temp *= A[i + 1]; B[i] *= temp; } return B; }