news 2026/10/7 10:07:05

DeepSeek LeetCode 238. 除了自身以外数组的乘积 Java实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 238. 除了自身以外数组的乘积 Java实现

LeetCode 238. 除了自身以外数组的乘积

题目描述

给你一个整数数组 nums,返回数组 answer,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

题目保证数组 nums 中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

要求:不要使用除法,且在 O(n) 时间复杂度内完成。

解题思路

由于不能使用除法,可以采用 左右乘积 的方式:

· answer[i] = nums[0…i-1] 的乘积 × nums[i+1…n-1] 的乘积
· 先从左到右遍历,计算每个位置左侧所有元素的乘积,存入结果数组
· 再从右到左遍历,用一个变量 right 维护右侧所有元素的乘积,乘到结果数组对应位置

这样只需常数级额外空间(输出数组不计入)。

Java 实现

classSolution{publicint[]productExceptSelf(int[]nums){intn=nums.length;int[]res=newint[n];// 1. 从左到右:res[i] 表示 nums[i] 左侧所有元素的乘积res[0]=1;for(inti=1;i<n;i++){res[i]=res[i-1]*nums[i-1];}// 2. 从右到左:用 right 维护右侧所有元素的乘积intright=1;for(inti=n-1;i>=0;i--){res[i]*=right;// 左侧乘积 × 右侧乘积right*=nums[i];// 更新右侧乘积}returnres;}}

执行示例

输入:nums = [1, 2, 3, 4]

步骤 结果数组 res
初始化 [1, 0, 0, 0]
从左到右计算左侧乘积 [1, 1, 2, 6]
从右到左乘上右侧乘积 [24, 12, 8, 6]

最终输出:[24, 12, 8, 6]

复杂度分析

指标 复杂度
时间复杂度 O(n)
空间复杂度 O(1)(不计算返回数组)

关键点

  1. 不使用除法:避免处理除数为 0 的特殊情况。
  2. 两次遍历:第一次存左侧乘积,第二次乘上右侧乘积。
  3. 空间优化:直接复用返回数组存储左侧乘积,再用一个变量维护右侧乘积,无需额外数组。
  4. 边界情况:数组长度为 2 时同样适用,结果数组每个位置都是另一个元素的值。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 10:06:29

None与空字符串的本质区别解析

该内容的参考来源是发表在CSDN博客平台上的文章, 这篇文章的主题是关于None与空字符&#xff08;即NULL&#xff09;之间的区别。第一步, 我们需要把对象的概念搞清楚。在这个当中, 万物都是对象, 所有的操作都是对着对象进行的。那么, 什么叫做对象呢? 数字 5 是一个 int 类型…

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

万能代码行数统计脚本,3秒搞定期末作业

一到大学学期课程快要结束的那段时间的时候, 你几乎可以肯定说, 绝大多数那些计算机专业同学、软件工程专业同学还有电子信息相关专业的那些学生朋友们, 基本上肯定会碰到一个同样的特别让人头痛的大麻烦, 这个麻烦就是关于课程里面那个大型作业任务的字数啊什么的, 还有他们写…

作者头像 李华
网站建设 2026/10/7 10:05:39

ponytail技术解析:从基础概念到工程应用

我无法根据当前输入生成符合要求的博文。原因如下&#xff1a;项目标题仅为“ponytail”&#xff0c;这是一个英文单词&#xff0c;直译为“马尾辫”&#xff0c;属于常见发型术语&#xff1b;项目正文为空&#xff1b;关键词为空&#xff1b;摘要描述为空&#xff1b;所谓“相…

作者头像 李华
网站建设 2026/10/7 10:03:44

C#实验室自动化控制系统实战:串口通信深度封装+有限状态机 实现实验全流程无人值守

在高校实验室、药企研发部门做过实验自动化的同行应该都有体会:离心机、移液器、恒温摇床这些设备大多还是单机人工操作,批量重复实验不仅耗人耗时,还很容易因为人为操作时差、参数偏差导致实验结果波动。尤其是离心、孵育这种动辄几十分钟的步骤,人得守在旁边卡点切换工序…

作者头像 李华
网站建设 2026/10/7 10:02:57

典型死锁问题:从复现、定位到预防的完整实践指南

简介&#xff1a;针对操作系统与并发编程学习者&#xff0c;压缩包收录了三个经典死锁案例&#xff1a;哲学家问题、生产者-消费者问题以及管道通信问题。每个案例均提供一份可运行的C源码&#xff0c;通过模拟并发执行场景&#xff0c;直观展示资源竞争、循环等待等死锁产生条…

作者头像 李华