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

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;
};
http://www.xdnf.cn/news/12828.html

相关文章:

  • 【JVM面试篇】高频八股汇总——Java内存区域
  • 华为OD机考 - 水仙花数 Ⅰ(2025B卷 100分)
  • 8. 二叉树(随想录)
  • 本地缓存在Java中的实现方式
  • “图像说话,文本有图”——用Python玩转跨模态数据关联分析
  • 【2025CVPR】模型融合新范式:PLeaS算法详解(基于排列与最小二乘的模型合并技术)
  • 飞云控盘指标-副图指标-买点一持仓操作技术图文解说
  • 初级程序员入门指南
  • 跟进一下目前最新的大数据技术
  • 设备驱动与文件系统:06 目录与文件
  • 骨盆-x光参数
  • python生成器
  • SWAN(Scade One) 语言原理介绍
  • Linux中《进程控制》详细介绍
  • RootSIFT的目标定位,opencvsharp。
  • DOM(文档对象模型)深度解析
  • 开源项目实战学习之YOLO11:12.6 ultralytics-models-tiny_encoder.py
  • 【深度学习-Day 25】告别过拟合:深入解析 L1 与 L2 正则化(权重衰减)的原理与实战
  • 标准代码项目开发流程学习指南
  • CMS内容管理系统的设计与实现:架构设计
  • 红黑树完全指南:为何工程都用它?原理、实现、场景、误区全解析
  • 数学:”度量空间”了解一下?
  • JESD204B IP核接口实例,ADI的ADRV9009板卡,ZYNQ7045驱动实现2发2收。
  • LLMs 系列科普文(14)
  • 关于IE浏览器被绑定安装,还卸载不掉
  • 72常用控件_QGridLayout的使用
  • 热成像实例分割电力设备数据集(3类,838张)
  • Vscode下Go语言环境配置
  • 矢状位片不可用怎么办?前后位测量方法评估骨盆倾斜角!
  • 智能职业发展系统:AI驱动的职业规划平台技术解析