剑指 Offer 66. 构建乘积数组

给定一个数组 A[0,1,...,n-1],请构建一个数组 B[0,1,...,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×...×A[i-1]×A[i+1]×...×A[n-1]。不能使用除法。

示例:

复制代码
输入: [1,2,3,4,5]
输出: [120,60,40,30,24]

提示:

  • 所有元素乘积之和不会溢出 32 位整数
  • a.length <= 100000

解答

cpp 复制代码
class Solution {
public:
    vector<int> constructArr(vector<int>& a) {
        int len = a.size();
        if(!len) return a;
        vector<int> res(len, 1);
        int tmp = 1;

        // 本次循环后,res[i]为下标为i左边的数的乘积
        for(int i = 1; i < len; ++i)
        {
            res[i] = res[i - 1] * a[i - 1];
        }

        for(int i = len - 2; i >= 0; --i)
        {
            tmp *= a[i + 1]; // 计算出下标i右边的数的乘积
            res[i] *= tmp;
        }
        return res;
    }
};
相关推荐
逝雪Yuki2 分钟前
P4017 最大食物链计数
c++·算法·动态规划·拓扑排序·洛谷
程序员小明儿11 分钟前
量子计算探秘:从零开始的量子编程与算法之旅 · 第四篇
算法·量子计算
程序员小明儿13 分钟前
量子计算探秘:从零开始的量子编程与算法之旅 · 第一篇
算法·量子计算
不想看见40414 分钟前
Add Strings数字处理--力扣101算法题解笔记
数据结构·算法·leetcode
云泽80818 分钟前
C++ STL set 容器全解析:从基础用法、算法实践到云同步实战
开发语言·c++·算法
absunique33 分钟前
复杂度分析中的常数优化与性能重构的技术6
算法·重构
初次攀爬者36 分钟前
力扣解题-74. 搜索二维矩阵
算法·leetcode
xiaoye-duck43 分钟前
《算法题讲解指南:优选算法-分治-快排》--45.数组中的第k个最大元素,46.最小的k个数
c++·算法
Galerkin码农选手1 小时前
per_tenor_quant_fp8和per_token_quant_fp8算法解读
人工智能·pytorch·算法
tankeven1 小时前
HJ125 最大最小路
c++·算法