news 2026/5/7 2:07:25

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100 238.除自身以外的数组的乘积

思路:

一、前后缀分解

1.answer[i]等于nums中除了nums[i]之外的其余各元素的乘积。换句话说,如果知道了i左边所有数的乘积,以及i右边所有数的乘积,就可以算出answer[i]。

2.定义pre[i]和post[i]:

(1)定义pre[i]表示从nums[0]到nums[i -1]的乘积。

(2)定义post[i]表示从nums[i + 1]到nums[n - 1]的乘积。

3.计算pre[i]和post[i]:

(1)要计算pre[i],可以先计算出nums[0]到nums[2]的乘积pre[i - 1],再乘上nums[i - 1],就得到了pre[i]。即pre[i] = pre[i - 1] * nums[i - 1]。

(2)同理可得,post[i] = post[i + 1] * nums[i + 1]。

4.设置初始值:pre[0] = post[n - 1] = 1。

5.所求结果answer[i] = pre[i] * post[i]。

6.复杂度分析:

(1)时间复杂度:O(n),其中n是nums的长度。

(2)空间复杂度:O(n)。

附代码:

class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length; int[] pre = new int[n]; pre[0] = 1; for(int i = 1;i < n;i++){ pre[i] = pre[i - 1] * nums[i - 1]; } int[] post = new int[n]; post[n - 1] = 1; for(int i = n - 2;i >= 0;i--){ post[i] = post[i + 1] * nums[i + 1]; } int[] ans = new int[n]; for(int i = 0;i < n;i++){ ans[i] = pre[i] * post[i]; } return ans; } }

二、优化先后缀分解(不使用额外空间)

1.思路:先计算post,然后一边计算pre,一边把pre直接乘到post[i]中,最后返回post。由于题目中说明输出数组不被视为额外空间,所以该做法的空间复杂度为O(1)。此外,这种做法可以少遍历一次。

2.复杂度分析:

(1)时间复杂度:O(n),其中n是nums的长度。

(2)空间复杂度:O(1),返回值不计入。

附代码:

class Solution { public int[] productExceptSelf(int[] nums) { int n = nums.length; int[] post = new int[n]; post[n - 1] = 1; for(int i = n - 2;i >= 0;i--){ post[i] = post[i + 1] * nums[i + 1]; } int pre = 1; for(int i = 0;i < n;i++){ //此时pre为nums[0]到nums[i - 1]的乘积,可以直接乘到post[i]中 post[i] *= pre; pre *= nums[i]; } return post; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/26 20:56:16

HR和IT都该看的自动化革命:Open-AutoGLM在社保查询中的真实应用案例

第一章&#xff1a;自动化革命下的HR与IT协同新范式在数字化转型加速的背景下&#xff0c;人力资源&#xff08;HR&#xff09;与信息技术&#xff08;IT&#xff09;部门之间的传统壁垒正被自动化工具逐步瓦解。两者的协同不再局限于系统维护或权限分配&#xff0c;而是深入到…

作者头像 李华
网站建设 2026/5/1 4:55:10

揭秘Open-AutoGLM收益查询黑科技:3步实现自动化收益追踪

第一章&#xff1a;揭秘Open-AutoGLM收益查询黑科技&#xff1a;3步实现自动化收益追踪在数字资产管理日益复杂的今天&#xff0c;高效追踪收益成为开发者与投资者的核心需求。Open-AutoGLM 作为一款基于大语言模型的自动化工具&#xff0c;提供了精准、低延迟的收益数据抓取与…

作者头像 李华
网站建设 2026/5/6 8:19:09

为什么顶级政务部门都在悄悄部署Open-AutoGLM?(内部技术白皮书流出)

第一章&#xff1a;Open-AutoGLM在政务场景中的战略定位Open-AutoGLM作为新一代开源自动化生成语言模型&#xff0c;正逐步成为政务智能化转型的核心支撑技术。其在政策解读、公文生成、智能问答与跨部门协同等关键场景中展现出强大的适应性与扩展能力&#xff0c;为构建高效、…

作者头像 李华
网站建设 2026/4/25 6:20:08

公积金提取太慢?Open-AutoGLM智能引擎提速9倍,你试过了吗?

第一章&#xff1a;公积金提取太慢&#xff1f;Open-AutoGLM智能引擎提速9倍&#xff0c;你试过了吗&#xff1f;在传统政务系统中&#xff0c;公积金提取流程常因人工审核、多级审批和数据孤岛问题导致处理周期长达7天以上。Open-AutoGLM 是一款基于大模型自动化决策的智能引擎…

作者头像 李华
网站建设 2026/5/6 18:40:08

计算机毕业设计springboot基于微信小程序的校园招聘系统 基于微信小程序的校园招聘管理系统设计与实现 SpringBoot框架下微信小程序校园招聘系统开发与应用

计算机毕业设计springboot基于微信小程序的校园招聘系统t71ls9 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着数字化技术的飞速发展&#xff0c;校园招聘管理逐渐从传统的线…

作者头像 李华