题意
法1—暴力法(无法通过)
class Solution
{
public:
vector<int> constructArr(vector<int>& a)
{
int size=a.size();
vector<int> b(size);
for(int i=0;i<size;i++)
{
int tmp=1;
for(int j=0;j<size;j++)
{
if(i!=j)
{
tmp*=a[j];
}
}
b[i]=tmp;
}
return b;
}
};
法2
算法流程:
- 初始化:数组 B ,其中 B[0] = 1 ;辅助变量 tmp = 1 ;
- 计算 B[i] 的 下三角 各元素的乘积,直接乘入 B[i];
- 计算 B[i] 的 上三角 各元素的乘积,记为 tmp ,并乘入 B[i];
- 返回B
class Solution
{
public:
vector<int> constructArr(vector<int>& a)
{
int size=a.size();
if(size<=1)
return a;
vector<int>b(size,1);
int tmp=1;
//计算左下角
for(int i=1;i<size;i++)
{
b[i] = a[i-1]*b[i-1];
}
//计算右上角
for(int i=size-2;i>=0;i--)
{
tmp = tmp*a[i+1];
b[i]*=tmp;
}
return b;
}
};