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

18-除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

function productExceptSelf(nums: number[]): number[] {
    const n = nums.length;
    const answer: number[] = new Array(n).fill(1);

    // 计算前缀乘积
    let prefix = 1;
    for (let i = 0; i < n; i++) {
        answer[i] *= prefix;
        prefix *= nums[i];
    }

    // 计算后缀乘积并与前缀乘积相乘
    let suffix = 1;
    for (let i = n - 1; i >= 0; i--) {
        answer[i] *= suffix;
        suffix *= nums[i];
    }

    return answer;
}

// 示例调用
const nums = [1, 2, 3, 4];
const result = productExceptSelf(nums);
console.log("数组中除自身元素外其余元素的乘积:", result);

代码解释

  1. 初始化数组:创建一个长度为 n 的数组 answer,并将所有元素初始化为 1,用于存储最终结果。
  2. 计算前缀乘积:使用一个变量 prefix 来记录前缀乘积,初始值为 1。通过遍历数组,将 answer[i] 乘以 prefix,然后更新 prefix 为 prefix * nums[i]。这样,answer[i] 就存储了 nums[0] 到 nums[i - 1] 的乘积。
  3. 计算后缀乘积并与前缀乘积相乘:使用一个变量 suffix 来记录后缀乘积,初始值为 1。从数组末尾开始向前遍历,将 answer[i] 乘以 suffix,然后更新 suffix 为 suffix * nums[i]。这样,answer[i] 就存储了 nums[0] 到 nums[i - 1] 的乘积乘以 nums[i + 1] 到 nums[n - 1] 的乘积,即除 nums[i] 之外其余各元素的乘积。
  4. 返回结果:遍历结束后,answer 数组中存储了除自身元素外其余元素的乘积,将其返回。

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。代码中使用了两次遍历数组的操作,每次遍历的时间复杂度都是O(n) ,因此总的时间复杂度为 。
  • 空间复杂度:O(1),除了返回的 answer 数组外,只使用了常数级的额外空间,因此空间复杂度为 。

这种方法通过巧妙地利用前缀乘积和后缀乘积,在不使用除法的情况下,高效地解决了问题。

 

相关文章:

  • P8716 [蓝桥杯 2020 省 AB2] 回文日期
  • 力扣-贪心-45 跳跃游戏
  • 【分布式数据一致性算法】Gossip协议详解
  • 【Rust中级教程】2.7. API设计原则之灵活性(flexible) Pt.3:借用 vs. 拥有、`Cow`类型、可失败和阻塞的析构函数及解决办法
  • 使用ESP-IDF来驱动INMP441全向麦克风
  • Python游戏编程之赛车游戏2
  • 【数据结构】(12) 反射、枚举、lambda 表达式
  • 苍穹外卖中的模块总结
  • Locale+Jackson导致Controller接口StackOverflowError异常解决
  • vue:vite 代理服务器 proxy 配置
  • TSMaster【第八篇:首战成名——第一个仿真工程实录(完整3000字版)】
  • Python深度学习:遥感影像目标识别中的数据标注技巧
  • 数据库增删查改sql语句
  • at32f103a+rtt+AT组件+esp01s 模块使用
  • Neo4j使用neo4j-admin导入csv数据方法
  • [特殊字符] Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南
  • 第七章 情绪力——情绪是多角度看问题的智慧
  • 数据库课设---酒店管理系统(MySQL、VBNet)
  • Windows平台使用cmake 链接动态库
  • 探索分析并发控制的关键作用 — 确保系统稳定与高效的技术导论
  • 解放日报社论:只争朝夕、不负重托,加快建成具有全球影响力的科技创新高地
  • 国际锐评:菲律宾“狐假虎威”把戏害的是谁?
  • 兴业银行一季度净赚超237亿降逾2%,营收降逾3%
  • 一场与纪录并行的伦敦马拉松,超40项新世界纪录诞生
  • 瞄准“美丽健康”赛道,上海奉贤如何打造宜居宜业之城?
  • 外交部:欢迎外国朋友“五一”来中国