当前位置: 首页 > news >正文

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

🔥个人主页: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; } };
http://www.jsqmd.com/news/360134/

相关文章:

  • AI工程师的成长指南
  • PatchPal:极简AI编码代理实现
  • AI时代的设计师:专业化vs.泛化
  • 机器视觉工程师职位深度解析与面试指南
  • 稳健医疗机器人工程师职位深度解析
  • 企业知识管理系统怎么选?17款工具对比:从协作编辑到安全合规
  • 跟思兼学Klipper(40) 免费高速简单的3D打印机远程控制服务
  • 机器人工程师职位深度解析与技术指南
  • MCP (Model Context Protocol) 技术理解 - 第一篇
  • 2026年靠谱的三合一设备/不锈钢三合一设备厂家采购参考指南 - 品牌宣传支持者
  • 2026年口碑好的精密吹塑/异形吹塑厂家口碑推荐汇总 - 品牌宣传支持者
  • IT运维智能体开发工程师的技术全景与实践指南
  • 协鑫集成高级AI开发工程师职位深度解析:职责、能力与面试指南
  • 安卓驱动开发工程师:深入技术核心,驱动智能未来
  • 2026年知名的澳洲移民留学对接/澳洲移民签证办理口碑排行实力厂家口碑参考 - 品牌宣传支持者
  • 2026年热门的氢氟酸反应釜/磷酸反应釜厂家采购参考指南(必看) - 品牌宣传支持者
  • 2026年热门的搪瓷薄膜蒸发器/山东刮板式薄膜蒸发器厂家最新推荐 - 品牌宣传支持者
  • 3DE CATIA基于知识工程的高效设计实战!
  • 聊一下电磁仿真和常用的电磁仿真软件
  • 2026年评价高的搪玻璃薄膜蒸发器/山东搪玻璃厂家实力参考 - 品牌宣传支持者
  • 2026年靠谱的丝绒压光压花/面料凹凸压光压花行业内口碑厂家推荐 - 品牌宣传支持者
  • 人工智能开发职位申请指南:陕西华码半导体科技有限公司面试准备
  • 南京夏宏智能科技有限公司人工智能工程师职位深度解析:技术精要、面试宝典与职业发展蓝图
  • 移动端软件开发工程师职位深度解析:以通桥医疗科技为例
  • 障碍期权做市商定价与对冲系统
  • 字符串 / 内存函数与大小端模式深度解析
  • PAC 分流配置文件使用指南
  • EasyX:从入门到入土
  • C# Avalonia 19- DataBinding- DataTemplateControls
  • viepress:vue组件展示和源码功能