啥也不说,上代码
#include <vector>
class RangeMultiply {
public:
/*
abcdefg
a g
ab fg
abc efg
abcd defg
abcde cdefg
abcdef bcdefg
*/
vector<int> calculate(const vector<int>& data) {
vector<int> l(data.size() - 1);
vector<int> r(data.size() - 1);
int lMul = 1;
int rMul = 1;
for (int i = 0; i < data.size() - 1; ++i) {
lMul *= data[i];
rMul *= data[data.size() - 1 - i];
l[i] = lMul;
r[i] = rMul;
}
vector<int> ans;
ans.resize(data.size());
ans[0] = r[r.size() - 1];
ans[data.size() - 1] = l[l.size() - 1];
for (int i = 1; i < data.size() - 1; ++i) {
ans[i] = l[i - 1] * r[r.size() - 1 - i];
}
return ans;
}
};
本文介绍了一种高效的算法,用于计算数组中每个元素两侧所有元素的乘积,从而得到除自身之外的其他元素乘积。该算法避免了直接除法操作,并确保了在不使用额外数据结构的情况下实现目标。

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



