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

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

leetcode 238
在这里插入图片描述

思路

可以在不使用除法的情况下,利用前缀积后缀积来实现解答

  • 前缀积:对每个位置,计算当前数字左侧的所有数字的乘积
  • 后缀积:对每个位置,计算当前数字右侧的所有数字的乘积
    结合这两种思想,可以在一次遍历中完成计算
    步骤:
  • 第一次遍历,计算每个位置左侧的前缀积,并直接保存在 answer 中
  • 第二次遍历,从右往左计算右侧的后缀积,并与 answer 中存储的前缀积相乘,得到最终结果

前缀积部分
使用一个变量 prefix 初始化为 1,遍历数组 nums,对于每个位置 i,将 prefix 保存到 answer[i] 中,并更新 prefix 为 prefix * nums[i]。这样,answer[i] 存储的是 nums 数组中所有 i 左边元素的乘积
后缀积部分
使用一个变量 suffix 初始化为 1,从数组的右侧开始遍历。对于每个位置 i,将 suffix 与 answer[i] 相乘,更新 suffix 为 suffix * nums[i]。这样,answer[i] 最终保存的是 i 左右两边元素的乘积

时间复杂度:O(n) 空间复杂度:O(1)

假设nums = [1,2,3,4]
前缀积得到的nums = [1,1,2,6] 每个元素左侧的乘积
后缀积得到的nums = [24,12,8,6]

实现

var productExceptSelf = function (nums) {let len = nums.length;const answer = new Array(len).fill(1)let prefix = 1;// 计算前缀积for (let i = 0; i < nums.length; i++) {answer[i] = prefix;prefix *= nums[i]}let suffix = 1;// 计算后缀积for (let i = len - 1; i >= 0; i--) {answer[i] = answer[i] * suffix;suffix *= nums[i]}return answer;
};

相关文章:

  • 权限一览表
  • AUTOSAR实战教程--标准协议栈实现DoIP转DoCAN的方法
  • 第三讲 Linux进程概念
  • java_dependencies_父子模块引入依赖关系
  • CompletableFuture+线程池使用案列
  • @Import原理与实战
  • 自定义protoc-gen-go生成Go结构体,统一字段命名与JSON标签风格
  • Go语言系统监控实战:gopsutil库全面解析与应用
  • 75Qt窗口_Qt窗口概览
  • Redis集群模式之主从复制模式(2)
  • 轻量级的Windows系统优化与个性化解决方案
  • 汽车车载软件平台化项目规模颗粒度选择的一些探讨
  • JS Day05
  • 幂等性的七大解决方案
  • 如何利用 audit2allow 工具调试SELinux日志
  • Spring类型转换器相关接口和实现原理
  • LLMs 系列科普文(8)
  • 免费批量PDF转Word工具
  • MyBatis原理剖析(一)
  • Vue ⑤-自定义指令 || 插槽
  • 2016网站建设总结/百度关键词如何优化
  • 襄阳的网站建设公司/扫一扫识别图片
  • 公司网站建设 wordpress/百度推广代理怎么加盟
  • 建设政府信息资源共享网站/百色seo外包
  • 做网站设计哪家好/seo到底是做什么的
  • 农业网站建设/线上销售渠道有哪些