news 2026/5/13 3:47:41

力扣面试经典150题之238:除了自身以外数组的乘积

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣面试经典150题之238:除了自身以外数组的乘积
11.除了自身以外数组的乘积

题目描述:给你一个整数数组nums,返回 数组answer,其中answer[i]等于nums中除了nums[i]之外其余各元素的乘积 。

题目数据 保证 数组nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。

请 不要使用除法,且在O(n)时间复杂度内完成此题。

思路:

我一开始的想法是先把这个数组所有的乘积算出来,再循环用这个总成绩分别除以每个数组元素的值,这样子只用遍历两次即可成功,但是违反了题目不能用除法的要求。

所以我想到了利用三个数组分别存储每个元素的前缀积,后缀积和结果,结果数组每个元素分别是前一个元素的前缀积和后一个元素的后缀积,虽然是要遍历三次,但是空间复杂度也上升到了O(n),代码如下。

public int[] productExceptSelf(int[] nums) { int len = nums.length; int i; int qian = 0 , hou = len - 1; int qiansum = 1; int housum = 1; int[] result = new int[len]; int[] qiansums = new int[len]; int[] housums = new int[len]; for(i=0;i<len;i++){ qiansum *= nums[i]; qiansums[i] = qiansum; } for(i=len-1;i>=0;i--){ housum *= nums[i]; housums[i] = housum; } for(i=0;i<len;i++){ if(i==0){ result[i] = housums[i+1]; } else if(i==len-1){ result[i] = qiansums[i-1]; } else{ result[i] = housums[i+1] * qiansums[i-1]; } } return result; }

后来我一直在想,有没有不需要这几个数组增加空间复杂度的做法,于是我想到了一个,我第一次遍历的时候,把前缀积先存进去,后面我再从尾部向头部遍历一次,利用算出来的后缀积与前面先保存的前缀积相乘,就可以实现题目要求了,于是把空间复杂度降到了O(1),时间复杂度也是O(n)。

public int[] productExceptSelf(int[] nums) { int len = nums.length; int sum = 1,i; int[] result = new int[len]; result[0] = 1; //保存前缀积 for(i=1;i<=len-1;i++){ sum *= nums[i-1]; result[i] = sum; } //把乘积清空 sum = 1; //计算后缀积的同时与前缀积相乘,得到结果。 for(i=len-2;i>=0;i--){ sum *= nums[i+1]; result[i] = result[i] * sum; } return result; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 15:31:44

ESP32实战-超声波雷达与水位监测系统构建

1. ESP32与超声波传感器的完美组合 第一次用ESP32连接HC-SR04超声波模块时&#xff0c;那种"隔空测距"的体验简直像变魔术。这个火柴盒大小的开发板&#xff0c;配合不到10块钱的传感器&#xff0c;就能实现精确到毫米的非接触测量。我清楚地记得当时在办公室测试&am…

作者头像 李华
网站建设 2026/4/17 9:25:51

5个步骤掌握Bypass Paywalls Clean:突破访问限制的内容访问工具全攻略

5个步骤掌握Bypass Paywalls Clean&#xff1a;突破访问限制的内容访问工具全攻略 在信息爆炸的时代&#xff0c;优质内容往往被付费墙层层阻隔。无论是学术研究、行业分析还是深度报道&#xff0c;想要获取有价值的信息常常需要付出高昂的订阅费用。作为一款开源的内容访问工…

作者头像 李华
网站建设 2026/4/12 15:05:11

网盘下载加速神器:直链解析工具让免费用户也能享受会员级速度

网盘下载加速神器&#xff1a;直链解析工具让免费用户也能享受会员级速度 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…

作者头像 李华
网站建设 2026/4/16 23:45:24

FanControl多语言界面配置指南:从安装到高级应用的全流程解析

FanControl多语言界面配置指南&#xff1a;从安装到高级应用的全流程解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…

作者头像 李华