
解法一
双向遍历,利用表格进行划分

可以把计算拆成两部分
从上到下,左下角一次遍历,计算出B[1]~B[3]的乘积
从下到上,右上角一次遍历,计算出B[2]~B[0]的乘积
这里用的技巧是基于上一个B[i-1]来计算,即 B[i] = B[i-1] * A[i-1]
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int n =a.size();
vector<int> b(n,1);
for (int i = 1; i < n; i++)
{
b[i]*=b[i-1]*a[i-1];
}
int accu=1;
for (int i = n-2; i>=0; i--)
{
accu*=a[i+1];
b[i]*=accu;
}
return b;
}
};
本文介绍了一种不使用除法运算就能求解数组中每个元素的左右两侧元素相乘积的方法。通过双向遍历和累积乘积的方式,该算法有效地解决了问题,并保持了O(n)的时间复杂度。
414

被折叠的 条评论
为什么被折叠?



