普通数组-----除了自身以外数组的乘积

🔥个人主页: Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

题目解析

这道题的核心是在不使用除法、且时间复杂度为 O(n) 的前提下,计算数组中每个元素除自身外所有元素的乘积。

直接暴力计算每个位置的乘积会导致 O(n²) 的时间复杂度,无法满足题目要求。我们可以利用前缀和后缀乘积的思路来高效解决这个问题。

思路分析

  1. 前缀乘积数组 v1

    • v1[i] 表示 nums[0]nums[i-1] 的乘积
    • 例如,v1[0] = 1(没有前缀元素),v1[1] = nums[0]v1[2] = nums[0] * nums[1]
  2. 后缀乘积数组 v2

    • v2[i] 表示 nums[i+1]nums[n-1] 的乘积
    • 例如,v2[n-1] = 1(没有后缀元素),v2[n-2] = nums[n-1]
  3. 结果计算

    • 对于每个位置 i,除自身外的乘积就是 v1[i] * v2[i]

完整代码

cpp

复制代码
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> v1(n, 1);
        vector<int> v2(n, 1);
        
        // 计算前缀乘积
        for (int i = 1; i < n; ++i) {
            v1[i] = v1[i-1] * nums[i-1];
        }
        
        // 计算后缀乘积
        for (int i = n-2; i >= 0; --i) {
            v2[i] = v2[i+1] * nums[i+1];
        }
        
        // 计算结果
        vector<int> ret(n);
        for (int i = 0; i < n; ++i) {
            ret[i] = v1[i] * v2[i];
        }
        
        return ret;
    }
};

复杂度分析

  • 时间复杂度 :O(n)
    • 我们只进行了三次线性遍历,分别计算前缀乘积、后缀乘积和最终结果。
  • 空间复杂度 :O(n)
    • 主要来自前缀和后缀两个辅助数组。
    • 可以优化到 O (1) 额外空间:直接在结果数组上先计算前缀乘积,再反向遍历计算后缀乘积并累积。

优化思路(O (1) 额外空间)

我们可以把结果数组先作为前缀乘积数组,然后用一个变量动态维护后缀乘积,从而去掉 v2 数组,将空间复杂度降为 O (1)。

cpp

复制代码
class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> ret(n, 1);
        
        // 前缀乘积存入结果数组
        for (int i = 1; i < n; ++i) {
            ret[i] = ret[i-1] * nums[i-1];
        }
        
        // 动态维护后缀乘积并更新结果
        int suffix = 1;
        for (int i = n-1; i >= 0; --i) {
            ret[i] *= suffix;
            suffix *= nums[i];
        }
        
        return ret;
    }
};
相关推荐
小O的算法实验室6 小时前
2026年IEEE TETCI,山区环境下基于双种群进化的协同无人机巡逻任务协同优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
A7bert7776 小时前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测
生成论实验室6 小时前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
CS创新实验室6 小时前
CS实验室行业报告:生物医药与生物工程行业就业分析报告
大数据·人工智能·生物医药
老陈头聊SEO6 小时前
生成引擎优化(GEO)在提升用户体验与内容创作效率中的创新应用
其他·搜索引擎·seo优化
风筝在晴天搁浅7 小时前
字节高频题 小于n的最大数
算法
LabVIEW开发7 小时前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序
AI科技星7 小时前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
风筝在晴天搁浅7 小时前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
gqk017 小时前
【无标题】
python