当前位置: 首页 > 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.jsqmd.com/news/119352/

相关文章:

  • 网络调试助手链接服务器
  • Open-AutoGLM保险管理实战指南(精准提醒+自动续保)
  • 【Java毕设源码分享】基于springboot+vue的的大学生创业网站的建设及应用(程序+文档+代码讲解+一条龙定制)
  • 还在手动查收益?AutoGLM自动化查询方案让你效率提升10倍,省时又精准
  • 还在手动查收益?AutoGLM自动化查询方案让你效率提升10倍,省时又精准
  • 揭秘Open-AutoGLM待办同步黑科技:如何实现跨平台零延迟数据同步
  • 从0到上线:中小企业如何用Open-AutoGLM搭建专属证件照服务平台
  • 为什么你的理财收益总算不准?深度解析Open-AutoGLM数据对接常见陷阱
  • Open-AutoGLM系统维护窗口期曝光:最佳预约时间竟然是这个时段!
  • 好写作AI:你的论文被“审稿人雷达”扫出AI味了吗?
  • 【Java毕设源码分享】基于springboot+vue的的大学生二手电子产品交易平台设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Java毕设源码分享】基于springboot+vue的的大学生二手闲置物品置换交易管理系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • Open-AutoGLM真的能根治“号贩子”问题吗:一线医院实测数据曝光
  • py每日spider案例之短视频解析接口
  • Open-AutoGLM体检报告集成实战(企业级应用案例深度剖析)
  • Open-AutoGLM待办事项同步实战指南(从配置到自动化部署)
  • 紧急修复提示:Open-AutoGLM地理编码偏差问题该如何应对?
  • 【Java毕设源码分享】基于springboot+vue的的大学生家教服务管理系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 在 Debian 13 上搭建一个 NTP (Network Time Protocol) 服务器
  • Open-AutoGLM证件照拍摄全攻略(AI驱动的精准人脸对齐技术大揭秘)
  • 手把手教你部署Open-AutoGLM洗车预约系统:10分钟快速上线指南
  • BZOJ 4897
  • (AI+汽车养护的终极方案)Open-AutoGLM技术白皮书首度公开
  • 【Java毕设源码分享】基于springboot+vue的的大学生家教管理系统设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Open-AutoGLM体检报告查询全解析】:手把手教你快速获取与解读AI健康报告
  • 揭秘Open-AutoGLM智能纪要生成:如何5分钟自动生成高质量会议记录
  • JavaSE——带参数的方法
  • JavaSE——成员变量和局部变量的区别
  • 国家电网Java面试被问:二叉树的前序、中序、后序遍历
  • UE:怎么查看打包到底打包了哪些文件