剑指 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;
    }
};
相关推荐
alphaTao5 小时前
LeetCode 每日一题 2026/10/5-2026/10/11
算法·leetcode
liliangcsdn6 小时前
现金流指标的探索和分析
大数据·算法
wang09076 小时前
硬着头皮学数据结构和算法之Myers算法
数据结构·算法
蓝悦无人机6 小时前
无人机系列之飞控算法:从PID到AI,飞行控制的核心进化
人工智能·算法·无人机·飞控系统
憨波个6 小时前
【说话人日志】DiariZen
人工智能·深度学习·算法·语音识别
用户7341681035486 小时前
被忽视的输入:为什么变工况故障诊断需要引入控制回路信号?
算法
垆边人似月.6 小时前
华为机试题 :最长递增子序列题目
数据结构·c++·算法·华为
动词ing6 小时前
【题目练习】算法 组合总和
算法
程序员-Benothing6 小时前
Linux文本排序统计命令:sort、uniq、wc、cut、tr实战
java·开发语言·算法
开发者联盟league7 小时前
c++11 使用chrono库转换时间点和字符串,计算时间点间隔
java·c++·算法