news 2026/10/29 11:09:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
普通数组-----除了自身以外数组的乘积

🔥个人主页: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; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 5:40:37

AI时代的设计师:专业化vs.泛化

也许这篇文章会像我们在过去几年中看到的行业中所有变化一样迅速过时。但即使我冒着这个风险&#xff0c;我觉得我需要写一些关于我在与数字产品合作的设计师中看到越来越多的传播的感觉&#xff1a;职业身份危机。 随着LLM在全球范围向所有受众普及&#xff0c;人工智能已经不…

作者头像 李华
网站建设 2026/10/23 4:52:46

机器视觉工程师职位深度解析与面试指南

南京大树智能科技股份有限公司 机器视觉工程师 职位信息 岗位职责: 1、从事机器视觉类检测产品的部分的现场安装、调试、客户培训及售后服务工作; 2、参与部分产品设计工作,并能对生产过程中出现的问题进行指导; 3、对工作富有思考,能够结合产品调试向设计师提出产品质量反…

作者头像 李华
网站建设 2026/10/28 7:49:17

EasyX:从入门到入土

◆博主名称&#xff1a;少司府 欢迎来到少司府的博客☆*: .&#xff61;. o(≧▽≦)o .&#xff61;.:*☆ ⭐数据结构系列个人专栏&#xff1a; 初阶数据结构_少司府的博客-CSDN博客 ⭐编程基础训练系列个人专栏&#xff1a; 编程基础50题_少司府的博客-CSDN博客 ⭐那些看…

作者头像 李华
网站建设 2026/10/23 14:24:43

viepress:vue组件展示和源码功能

VitePress实战&#xff1a;vue组件展示和源码功能 一、项目结构与基础配置 1.1 侧边栏配置&#xff08;sidebar.ts&#xff09; // docs/.vitepress/sidebar.ts export default {/example/: [{text: Examples,items: [{ text: Markdown Examples, link: /example/markdown }…

作者头像 李华
网站建设 2026/10/28 1:16:29

基于Spring Boot的躲猫猫书店管理系统

目录 摘要 演示视频 系统功能实现 代码实现 推荐项目 项目案例 项目开发总结 为什么选择我 源码获取 博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于…

作者头像 李华
网站建设 2026/10/28 5:06:38

基于Spring Boot的校园闲置物品交易系统

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

作者头像 李华