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

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

相关文章:

  • Open-AutoGLM保险管理实战指南(精准提醒+自动续保)
  • 从0到上线:中小企业如何用Open-AutoGLM搭建专属证件照服务平台
  • 揭秘Open-AutoGLM待办同步黑科技:如何实现跨平台零延迟数据同步
  • Open-AutoGLM会议纪要黑科技(90%团队还不知道的AI提效神器)
  • Open-AutoGLM待办事项同步实战指南(从配置到自动化部署)
  • Open-AutoGLM体检报告集成实战(企业级应用案例深度剖析)
  • 在 Debian 13 上搭建一个 NTP (Network Time Protocol) 服务器
  • JavaSE——成员变量和局部变量的区别
  • 国家电网Java面试被问:二叉树的前序、中序、后序遍历
  • 【Open-AutoGLM保险到期提醒】:3大智能监控策略助你零遗漏规避断保风险
  • Open-AutoGLM理财收益查询全攻略(99%人不知道的高效技巧)
  • 为什么顶尖程序员都在用Open-AutoGLM做公积金提取?真相曝光
  • Open-AutoGLM落地案例曝光:某省政务大厅办结时间从7天缩短至45分钟
  • CangjieMagic-Cjoy大模型问答Web应用示例
  • 【Open-AutoGLM用药提醒黑科技】:揭秘AI如何精准预测最佳服药时间
  • Open-AutoGLM实战应用:5步打造你的私人AI养车顾问
  • Open-AutoGLM核心技术揭秘:AI驱动下的公积金提取效率革命
  • Open-AutoGLM油站查询性能优化:从响应超时到毫秒级返回的全过程
  • yuki
  • Open-AutoGLM如何破解社保数据获取难题:技术架构与接口调用深度剖析
  • 10370_基于Springboot的校园志愿者管理系统
  • 【限时干货】Open-AutoGLM辅助工具使用手册(仅剩200个免费名额)
  • 详细介绍:MongoDB小课堂: 高级查询操作符与游标管理综合指南之深度整合逻辑操作符、字段处理、数组查询与游标控制的最佳实践
  • Open-AutoGLM预约成功率提升300%:资深用户都在用的自动化工具解析
  • 紧急通知:全国首批Open-AutoGLM试点单位名单公布,你的城市在列吗?
  • 揭秘Open-AutoGLM自动社保查询系统:如何3分钟完成百人参保数据采集
  • 为什么90%的预约系统都失败了?:Open-AutoGLM三大设计原则全公开
  • 从0到1构建智能洗车预约系统,Open-AutoGLM实战全流程详解
  • 【每日算法】LeetCode238. 除自身以外数组的乘积
  • 为什么90%的洗车平台都失败了?Open-AutoGLM架构设计中的6个关键决策