当前位置: 首页 > 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.cnnetsun.cn/news/173641.html

相关文章:

  • 揭秘Open-AutoGLM体检数据查询机制:5步实现高效精准调用
  • Open-AutoGLM实战指南:7步搭建企业级智能会议纪要系统
  • 还在手动查收益?AutoGLM自动化查询方案让你效率提升10倍,省时又精准
  • 【Java毕设全套源码+文档】基于springboot的大学生家教兼职管理系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 从数据到决策,Open-AutoGLM如何重构车辆生命周期管理
  • 【Open-AutoGLM体检报告查询全解析】:手把手教你快速获取与解读AI健康报告
  • 社保数据天天查,你还在人工操作?Open-AutoGLM自动化方案已全面上线
  • (稀缺资源)Open-AutoGLM社保机器人部署教程:仅限内部流传的配置参数曝光
  • 2026年职场暗流:HR不会告诉你的CAIE证书真相,零基础如何破局?
  • 【高效出行必备技能】:利用Open-AutoGLM实现智能加油站实时检索
  • 为什么90%的预约系统都失败了?:Open-AutoGLM三大设计原则全公开
  • 【Open-AutoGLM加油站查询实战指南】:手把手教你快速定位全国油站信息
  • Android Qualcomm USB 专题系列【篇一:UsbHost模式配置】
  • 9 个降AI率工具,研究生必备!
  • SCI :Letter发表攻略:好发与否全解析
  • 预约总是失败?,深度剖析Open-AutoGLM服务排队机制与抢号策略
  • Open-AutoGLM维修服务预约实战技巧(90%用户不知道的隐藏通道)
  • 【Java毕设源码分享】基于springboot+vue的大学生爱心互助代购网站设计与实现(程序+文档+代码讲解+一条龙定制)
  • STP实验
  • 只用一个 GPT 客户端,如何实现一个可控、可审计的投资决策 Runtime?
  • 网页如何设计.NET Core大文件上传的日志记录与监控系统?
  • Open-AutoGLM 对比传统查询引擎:性能提升8倍的秘密是什么?
  • 揭秘Open-AutoGLM核心算法:1秒匹配最优家政服务员的底层逻辑
  • 传统美甲预约正在被淘汰?Open-AutoGLM带来的5大颠覆性变革
  • 为什么顶级票务平台都在测试 Open-AutoGLM?3个真实应用场景曝光
  • 好写作AI:论文写到后面忘了前面?你可能需要这份“逻辑心电图”
  • 从宕机到自愈:Open-AutoGLM自动恢复系统的7个核心技术组件
  • Open-AutoGLM电影票购买实战指南(99%人不知道的隐藏技巧)
  • 【稀缺资料】Open-AutoGLM企业级实战FAQ:仅限内部流传的7条黄金法则曝光
  • 数据安全合规迫在眉睫,Open-AutoGLM加密优化方案已让500+企业脱敏升级