45.构建乘积数组
题目内容:
代码及思路:
因为B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1],所以可以设定两个数组C和D,C=A[0]*A[1]*...*A[i-1],D=A[n-1]*...*A[i+1].最后再根据B=C*D即可得到
#include<iostream>
#include<vector>
using namespace std;
class Solution
{
public:
vector<int> multiply(vector<int>& A)
{
int n = A.size();
//对C和D数组进行初始化
vector<int> C(n,1); //初始化n个1
vector<int> D(n,1);
vector<int> res;
//C=A[0]*A[1]*...*A[i-1],D=A[n-1]*...*A[i+1]
for (int i = 1; i < n; i++)
{
C[i] = C[i - 1] * A[i-1];
}
for (int j = n - 2; j >= 0; j--)
{
D[j] = D[j + 1] * A[j + 1];
}
for (int i = 0; i < n; i++)
{
res[i] = C[i] * D[i];
}
return res;
}
};
void main()
{
Solution* object = new Solution;
vector<int> numbers;
int num;
char ch;
do
{
cin >> num;
numbers.push_back(num);
cin.get(ch);
} while (ch == ',');
vector<int> res;
res = object->multiply(numbers);
for (int i = 0; i < res.size(); i++)
{
cout << res[i] << endl;
}
}