news 2026/6/9 20:29:54

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/6/10 14:17:57

Open-AutoGLM如何重塑公积金提取体验:8步自动化流程全公开

第一章&#xff1a;Open-AutoGLM 公积金提取辅助在智能政务与自动化办公场景中&#xff0c;Open-AutoGLM 作为一款基于开源大语言模型的智能助手框架&#xff0c;能够高效支持公积金提取流程的自动化辅助。通过自然语言理解与结构化数据解析能力&#xff0c;该系统可自动识别用…

作者头像 李华
网站建设 2026/6/10 11:28:35

网络调试助手链接服务器

连不上服务器问题首先手动编辑远程主机地址为目标服务器IP再打开tcp客户端拓展选项选择自动选择本地主机地址&#xff08;推荐&#xff09;再连接就可以了。问题原因&#xff1a;我认为处在这几个字上本地主机地址&#xff0c;还得自主选择

作者头像 李华
网站建设 2026/6/10 14:16:01

Open-AutoGLM如何实现毫秒级保险状态检测与自动通知?

第一章&#xff1a;Open-AutoGLM 保险到期提醒在现代智能运维系统中&#xff0c;自动化提醒机制是保障服务连续性的关键环节。Open-AutoGLM 是一个基于大语言模型驱动的自动化任务调度框架&#xff0c;其核心能力之一是通过自然语言理解实现动态任务触发。以“保险到期提醒”为…

作者头像 李华
网站建设 2026/6/10 3:07:40

Open-AutoGLM待办事项同步实战指南(从配置到自动化部署)

第一章&#xff1a;Open-AutoGLM待办事项同步概述Open-AutoGLM 是一个面向自动化任务管理的开源框架&#xff0c;专注于实现跨平台待办事项的智能同步与语义理解。该系统利用大语言模型&#xff08;LLM&#xff09;解析自然语言输入&#xff0c;自动提取任务信息并同步至主流待…

作者头像 李华
网站建设 2026/6/10 14:14:19

Open-AutoGLM智能用药系统:3大核心机制让你再也不会漏服药物

第一章&#xff1a;Open-AutoGLM智能用药系统概述Open-AutoGLM 是一个基于大语言模型的智能用药辅助系统&#xff0c;旨在为临床医生、药师及患者提供精准、可解释的用药建议。系统融合了医学知识图谱、自然语言处理与规则推理引擎&#xff0c;能够在理解患者病历、诊断结果和当…

作者头像 李华
网站建设 2026/6/10 18:20:49

揭秘Open-AutoGLM自动提醒机制:如何用AI提前30天预警保险到期?

第一章&#xff1a;Open-AutoGLM保险到期提醒机制概述Open-AutoGLM 是基于 AutoGLM 架构构建的智能化运维系统模块&#xff0c;专注于企业级服务中的自动感知与响应能力。其保险到期提醒机制作为核心功能之一&#xff0c;旨在通过自然语言理解与结构化数据监控相结合的方式&…

作者头像 李华