leetcode238-除自身以外数组的乘积
问题描述
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
解题思路1:(左右乘积列表)
我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。
对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们看看代码
class Solution {public int[] productExceptSelf(int[] nums) {int n=nums.length;if(nums.length<=1){return nums;}int [] pre=new int[n]; //pre表示从某个元素左边所有元素的乘积int [] next=new int[n]; //next表示某个元素右边的所有元素的乘积pre[0]=1; //初始最左边的数的乘积for(int i=1;i<n;i++){ //依次计算左边所有元素的乘积放入到数组中pre[i]=pre[i-1]*nums[i-1];}next[n-1]=1;for(int i=n-2;i>=0;i--){ //依次计算右边所有元素的成绩放入到数组中next[i]=next[i+1]*nums[i+1];}int []res=new int[n];res[0]=next[0];res[n-1]=pre[n-1];//左边所有元素的乘积乘以右边所有元素的乘积for(int i=1;i<n-1;i++){res[i]=pre[i]*next[i];}return res;}
}
解题思路2:空间复杂度O(1)
尽管上面的方法已经能够很好的解决这个问题,但是空间复杂度并不为常数。
由于输出数组不算在空间复杂度内,那么我们可以将 L 或 R 数组用输出数组来计算。先把输出数组当作 L 数组来计算,然后再用left动态保存nums数组当前左边所有元素乘积得到的结果。让我们来看看基于这个思想的算法。
class Solution {public int[] productExceptSelf(int[] nums) {int n=nums.length;if(nums.length<=1){return nums;}//res数组不仅起到保存结果值的作用,也起到了保存右边所有元素乘积的作用int res[]=new int[n];//先让res数组保存右边所有元素的乘积res[n-1]=1;for(int i=n-2;i>=0;i--){res[i]=res[i+1]*nums[i+1];}int left=1; //left可以用来累积左边元素的乘积//再依次计算每个元素的其余元素的乘积,而res[0]已经计算出来了for(int i=1;i<n;i++){left*=nums[i-1];res[i]=left*res[i];}return res;}
}
leetcode238-除自身以外数组的乘积相关推荐
- leetcode238 除本身以外数组的乘积
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...
- Leetcode--238. 除自身以外数组的乘积
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...
- DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
C语言好题方法总结.日积月累,慢慢进步! 目录 一.题干 二.题解 1.暴力破解法 2.左右累乘法 思路 代码 三.总结 一.题干 LeetCode链接 238. 除自身以外数组的乘积https:// ...
- leetcode刷刷题(44) ---- 除自身以外数组的乘积(C语言版)
2020-6-4 I once heard that the evil spirits who lived in Rashomon fled for fear of the cruelty of hu ...
- 除自身以外数组的乘积—leetcode238
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: ...
- LeetCode实战:除自身以外数组的乘积
背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given an ar ...
- opencv计算两数组的乘积_opencv矩阵运算(2)
简单介绍 本篇承接上一篇.继续opencv下矩阵计算的函数使用. 计算矩阵的逆 注意:矩阵A是可逆矩阵的充分必要条件是行列式detA不等于0. 详细代码 double x[3][3] = {{1, 2 ...
- leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)
题目 https://leetcode.com/problems/product-of-array-except-self/ 题解 本题思路比较简单,先算一个原数组的总的乘积 p,然后对应除以每一个位 ...
- opencv计算两数组的乘积_#剑指Offer#12. 构建乘积数组
题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]. 其中B中的元素B[i]=A[0] * A[1]... * A[i-1] * A[i+1]... * A ...
- [剑指offer]面试题第[66]题[构建乘积数组][Leetcode][JAVA][第238题][除自身以外数组的乘积][数组]
[问题描述][中等] 给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘 ...
最新文章
- GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
- 在线作图|如何绘制一张好看的点棒图
- 卷积网络基础知识---Group Convolution分组卷积
- Java代码实现执行Linux服务器命令
- 1 uC/OS工程目录
- 安卓* 系统级 Java*/C++ 代码调试
- 如何开发一个多种语言版本的C#程序
- 前端页面怎么办啊一条长的信息换行展示_前端入门!不容错过!HTML基本标签知识大盘点...
- pycharm汉化包使用后无法打开设置选项问题
- SIM7600模块固件升级(模块自身升级)
- 国内小程序生态服务平台即速应用完成5000万元A+轮融资...
- 网页前端大作业主界面(Html+CSS+JS+Axios)
- 第一二天作业-BGP MPLS + OSPF分流互备做法
- c语言函数指针 的定义方法,C语言 函数指针一(函数指针的定义)
- ATF(Arm Trusted Firmware)/TF-A Chapter 04 Authentication Framework
- BaySpec 光纤光栅解调模块 FBGA
- linux学习——1.ping通百度
- 程序员新人面临最尴尬的事:需要工作积累经验,需要有经验才能找到工作!到底怎么办?...
- 如何从一个空有上进心的人,变成行动上的巨人?
- 滤波器基础01——滤波器的种类与特性
热门文章
- 薏米到底有多强大?真是没想到还能这样吃~
- leetcode-reverse words in a string
- 中职计算机课程教学,提高中职计算机课程教学效率的途径
- java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...
- java如何检测输入合法_使用java写的一个简易的计算器,可以检测输入是否合法。.doc...
- setnx是原子操作吗_Redis面试七连问,你能扛得住吗?
- 梯度下降和导数的作用
- pion webrtc 示例代码解析 一
- php变量有三种不同的作用域,PHP中变量类型与转换,变量的检测以及变量的作用域学习--2018年4月13日12时03分...
- 华为鸿蒙系统支持什么手机_什么样的手机可以刷鸿蒙系统?看看你的手机支持吗?...