【LeetCode Hot100】除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!

Java实现 LeetCode 238 除自身以外数组的乘积 238. 除自身以外数组的乘积 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 进阶: 你可以在常数空间复杂度内完成这个题目吗?( 出于... 阅读详情

💻 [LeetCode Hot100] 除自身以外数组的乘积|左右乘积列表,Java实现!图解+代码,小白也能秒懂!

✏️本文对应题目链接:除自身以外数组的乘积


📌 题目描述

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

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

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

示例:

输入:nums = [1,2,3,4]
输出:[24,12,8,6]

🧠 解题思路(图文分解)

❗ 核心难点

如何在O(n)时间复杂度内,不使用除法,计算每个元素除自身以外的乘积?


方法一:左右乘积列表(黄金思路)✨

关键步骤:

  1. 初始化:
    • 创建两个数组 left 和 right,分别存储每个元素左侧和右侧的乘积
  2. 计算左侧乘积:
    • 从左到右遍历数组,累乘左侧元素
  3. 计算右侧乘积:
    • 从右到左遍历数组,累乘右侧元素
  4. 计算结果:
    • 对于每个元素,answer[i] = left[i] * right[i]

图解左右乘积列表

输入数组:

nums = [1, 2, 3, 4]

步骤1:计算左侧乘积

left[0] = 1
left[1] = 1 * 1 = 1
left[2] = 1 * 2 = 2
left[3] = 2 * 3 = 6
left = [1, 1, 2, 6]

步骤2:计算右侧乘积

right[3] = 1
right[2] = 1 * 4 = 4
right[1] = 4 * 3 = 12
right[0] = 12 * 2 = 24
right = [24, 12, 4, 1]

步骤3:计算结果

answer[0] = left[0] * right[0] = 1 * 24 = 24
answer[1] = left[1] * right[1] = 1 * 12 = 12
answer[2] = left[2] * right[2] = 2 * 4 = 8
answer[3] = left[3] * right[3] = 6 * 1 = 6
answer = [24, 12, 8, 6]

🚀 代码实现

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] answer = new int[n];

        // 计算左侧乘积
        int[] left = new int[n];
        left[0] = 1;
        for (int i = 1; i < n; i++) {
            left[i] = left[i - 1] * nums[i - 1];
        }

        // 计算右侧乘积
        int[] right = new int[n];
        right[n - 1] = 1;
        for (int i = n - 2; i >= 0; i--) {
            right[i] = right[i + 1] * nums[i + 1];
        }

        // 计算结果
        for (int i = 0; i < n; i++) {
            answer[i] = left[i] * right[i];
        }

        return answer;
    }
}

💡 复杂度分析

  • 时间复杂度:O(n) → 遍历数组三次
  • 空间复杂度:O(n) → 需要两个辅助数组 left 和 right

方法二:空间优化(进阶思路)

关键思路:用输出数组 answer 代替左侧乘积列表,使用变量动态计算右侧乘积。

class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] answer = new int[n];

        // 计算左侧乘积
        answer[0] = 1;
        for (int i = 1; i < n; i++) {
            answer[i] = answer[i - 1] * nums[i - 1];
        }

        // 计算右侧乘积并更新结果
        int right = 1;
        for (int i = n - 1; i >= 0; i--) {
            answer[i] = answer[i] * right;
            right = right * nums[i];
        }

        return answer;
    }
}

🌟 总结要点

✅ 左右乘积核心思想:将问题分解为左侧乘积和右侧乘积
✅ 空间优化技巧:用输出数组代替额外空间
✅ 适用场景:数组累积问题、前缀后缀问题


LeetCode hot 100 解题思路记录(一) 重叠是则更新列表最后一个区间的右边界,取两者最大值否则直接添加到结果列表返回结果列表。 阅读详情

相关推荐

LeetCode hot 100 解题思路记录(三)

本文是个人学习的粗糙笔记,仅记录思路和图解(跳过了困难题,等之后再弄)视频看的是油管上的neetcode。

m0_68932052的博客 1001

Leetcode238. 除自身以外数组的乘积(java实现)

先遍历前缀积,num[0]的1的前缀积为1,num[1],2的前缀积也是1,num[2],3的前缀积为2…,前缀积的[1,1,2,6];再计算它的后缀积=[1,4,12,24],将前缀积和后缀积进行相乘即可得到目标数组。本道题我最先想到的是先乘积所有的元素,然后除以所有元素,但是本题无法使用除法。今天分享的题目是letcode238. 除自身以外数组的乘积。拿nums[]={1,2,3,4};本题的解题思路是使用前缀积。

Kirihara_Yukiho的博客 505

STC8单片机高精度EV1527解码实战:定时器捕获+状态机抗干扰方案

EV1527是一种广泛应用于433MHz无线遥控的曼彻斯特编码协议,其核心在于对脉宽时序(如同步头、逻辑0/1)的微秒级精确识别。传统外部中断+延时判别方式受MCU中断延迟、编译优化及环境噪声影响,极易导致误码;而基于硬件定时器输入捕获的解码方案,将时间测量交由硬件完成,显著提升时序鲁棒性与温度/电压适应性。该技术适用于STC8等无专用无线解码外设的8位单片机,在智能开关、晾衣架、车库门控等IoT终端中实现低至0.003%的稳定误码率。本文聚焦STC8H系列利用T1定时器下降沿捕获与有限状态机协同解码EV1

weixin_29188997的博客 181

除自身以外数组的乘积(LeetCode第238题)java实现

一、题目描述 给定长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在O(n) 时间复杂度内完成此题。 进阶: 你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂...

alan_gaohaodong的博客 383

STM32F103VET6实战:用W25Q64外部Flash实现Bootloader远程升级(含完整代码解析)

本文详细介绍了基于STM32F103VET6与W25Q64外部Flash的Bootloader远程升级实现方案,包含硬件选型、存储分区策略、双校验机制及完整代码解析。通过SPI接口实现固件存储与升级,适用于物联网设备开发,提升OTA功能可靠性。

weixin_42620340的博客 357

从零配置ORB-SLAM3:TUM-VI数据集yaml文件参数调优指南

本文深入解析了ORB-SLAM3在TUM-VI数据集上的yaml配置文件参数调优方法。针对双目惯性模式,详细拆解了相机标定、IMU噪声模型和ORB特征提取三大模块的关键参数,解释了其原理与影响,并通过实战案例展示了如何通过调整特征点数量、FAST阈值及IMU噪声参数,有效提升系统在低纹理环境下的鲁棒性和轨迹精度。

weixin_29071809的博客 151

Leetcode238. 除自身以外数组的乘积[Med] -JAVA

题目传送门 Leetcode238. 除自身以外数组的乘积[Med] -JAVA题目思路解法左右乘积列表 题目 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。 说明: 请不要使用除法,且在 O(n) 时

小小柯 357

爬虫小例--爬药监局(上)

”明月如霜,好风如水,清景无限 “ 文远最近也算是爬虫入门吧,相信后面会慢慢熟悉。 壹 直接上例子,爬取药监局的数据。目的是得到每家公司的详情数据,例: 具体网址:http://scxk.nmpa.gov.cn:81/xk/ 这是主页,下面详情信息: 贰 分析,通过网页检查发现,主网页上没有公司相关数据,观察XHR中的Ajax请求发现,公司信息都是动态数据(方便更新),点击发现每个公司 的详情信息通过ID号这个参数区别,那么可以确定思路是先得到每个公司的ID号,然后在通过ID对应每一个详细网站,同样右键

john_ashley的博客 4556

[Leetcode] 238. 除自身以外数组的乘积 java

 给定长度为 n 的整数数组 nums,其中 n &gt; 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。 进阶: 你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目...

niceHou666的博客 903

「大模型学习」(14)Long Context之线性插值、NTK-aware、Yarn、LongRoPE

大语言模型长上下文扩展中的位置插值技术 摘要:为解决大语言模型(LLMs)在推理阶段扩展上下文窗口时的位置编码限制,研究人员开发了一系列位置插值技术。这些方法主要针对旋转位置编码(RoPE)机制,通过不同策略调整位置索引以适应超出训练长度的上下文。典型方法包括:基础位置插值(PI)均匀缩放位置索引;NTK-aware插值对不同频率维度差异化处理;NTK-by-parts插值根据波长分段调整;Yarn插值结合温度调节;以及LongRoPE采用非均匀插值策略。这些技术在不修改模型结构的前提下,通过调整位置编码的

qq_43044037的博客 1643

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 673

#LeetCode#Problem 238. Product of Array Except Self-除自身以外数组的乘积(java版)

读题 题目难度:medium 题目要求: 输出数组的第 i 位 = 除自身以外其他各元素的乘积; 复杂度为O(n)。 思路 双层循环 最简单、最容易想到的思路就是用双层循环,每次判断后在原基础上只乘上非自身的数即可,但是复杂度是O(n^2),超出了题目的要求。 代码如下: class Solution { public int[] productExceptSelf(int[] num...

Sunshine94warm的博客 407

GEE训练教程:如何批量从Google assets中将时序影像批量导出到Google drive

本文介绍了一种使用Google Earth Engine(GEE)批量导出2000-2023年叶绿素a(Chl-a)浓度数据的方法。通过JavaScript代码自动生成多个年份的导出任务,将数据保存至Google Drive指定文件夹。文章详细说明了代码参数配置、使用步骤和注意事项,包括资产命名规则验证、导出任务启动方式,以及分辨率、区域范围等关键参数的调整建议。同时提供了常见问题的解决方案,如处理缺失年份数据、解决导出像素超限等问题。该方法可显著提高多年份Chl-a数据批量导出的效率,适用于水体环境研究的

此星光明博客 90

leetcode238——除自身以外数组的乘积——java实现

题目要求: 分析: 由于这道题目不能使用除法,所以我们一定要用乘法来做。 我们可以以当前点i为中心,i的左边为一块,i的右边为一块,分别进行求乘积的运算,最后将它们乘起来即可。 可以参考下面的例子: 具体代码如下: class Solution { public int[] productExceptSelf(int[] nums) { int[] result1 = ...

阿花的IT历程 254

C++ (week6、7):Linux系统编程4:网络

Linux网络:计算机网络概述、TCP协议、Socket编程、IO多路复用机制(select、epoll)、HTTP协议、进程池、线程池、大文件网络传输问题

Edward2022的博客 1430

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Leetcode(Java)-238. 除自身以外数组的乘积

给定长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明: 请不要使用除法,且在O(n) 时间复杂度内完成此题。 进阶: 你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输...

Slayer_Zhao的博客 238

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

leetcode-238 除自身以外数组的乘积 [Java]

题目: 想法:用两个数组head、tail存储一个位置前/后的所有数字的乘积,head和tail再按位相乘得到最终输出矩阵。 代码: class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length; int[] head = new int[n]; int[] tail = new int[n]; int i;

敲代码的猫 432

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode014 : 除自身以外数组的乘积

一、写在前面 LeetCode 第十二题反转字符串传输门:LeetCode013 : 反转字符串中的单词 III 今天给大家分享的是LeetCode 数组与字符串 第十四题: 除自身以外数组的乘积,为面试而生,期待你的加入。 “Use the utility in the API is recommended in the project. But if you use it in an inte...

简说Python的博客 3320

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 207

LeetCode 每日一题 2026/11/2-2026/11/8

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步

AlphaTao的博客 175

Hash表:两数之和、字母异位词分组、最长连续序列 [力扣 Hot100]

三道高频哈希表应用题:两数之和(利用HashMap快速查找补数)、字母异位词分组(排序后作为键分组)、最长连续序列(通过HashSet去重并仅从序列起点扩展)。核心思想均为借助哈希结构优化查找效率,避免重复计算。同时提及双指针等其他解法思路,体现算法设计中“空间换时间”的典型策略。

2403_87560480的博客 218

力扣73 矩阵置零

该解法通过标记含0的行和列来实现矩阵置零。遍历矩阵,用布尔数组记录有0的行和列;再遍历一次,若当前行或列被标记,则置为0。时间复杂度O(mn),空间复杂度O(m+n)。

Pniubi的博客 22

LeetCode Hot 100 二叉树专题(三):BST 二叉搜索树与右视图(Java)

本专题主线:三题(98 / 230 / 199)共用两把钥匙——BST 的中序序列严格递增,以及遍历中的"层"与"深度"标记。看懂这两点,三题共用一套模板。 结构约定:每题统一分三部分——①题目分析与解题思路(含易错点辨析);②常见解法(附代码)及讲解;③知识点总结。

2401_88612756的博客 590

LeetCode 3926. 统计有效单词的出现次数【分组循环】

核心思想:用分组循环,一趟遍历字符串,把一个个单词切出来,丢进哈希表统计频次。,先把所有片段拼接成完整文本字符串。,依次返回每个单词在文本里的出现次数。难点:内层循环的判断条件,区分。

2503_92676540的博客 170

力扣第526场周赛心得理解

思路:因为题目要求尽可能求出最小的最大值,而满足要求最小公约数为2,作为题目要求最小的最大值,先去求出它的最大公约数再通过value判断最左边是否大于0,以及value本身是否大于0,而index的位置只能为中间或者最右边,所以最后输出只能是value本身或者在这个基础上加相隔相应距离次数的结果。两个整数,是指将第二个整数的所有十进制数位拼接在第一个整数的所有十进制数位之后。如果不存在这样的数组,返回 -1。4097. 合并整数后的最小值。返回所有合并后得到的整数中的。合并,依此类推,直到将。

目前主攻编程,目标是把屏幕上的红波浪线变成流畅运行的程序♪(^∀^●)ノシ 205
上一篇: 【LeetCode Hot100】 轮转数组|三次反转法,Java实现!图解+代码,小白也能秒懂!
下一篇: 【LeetCode Hot100】缺失的第一个正数|原地哈希,Java实现!图解+代码,小白也能秒懂!
AllowM
博客等级 码龄7年 111粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值