侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

剑指 Offer 66. 构建乘积数组

Hope
2022-04-11 / 0 评论 / 0 点赞 / 232 阅读 / 341 字
温馨提示:
本文最后更新于 2022-04-11,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

剑指 Offer 66. 构建乘积数组
思路:
image.png
如果按照正常的思路就是前后缀分解,计算前面的乘积和,后面的乘积和,最后计算在一起。

b[i]表示a[0] * ... * 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] = a[i - 1] * b[i - 1];

        for(int i = n - 1,s = 1; i >= 0; i--){
            b[i] *= s;
            s *= a[i];
        }
        return b;
    }
};
0

评论区