ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

力扣238(java)-除自身以外数组的乘积(中等)

2022-04-29 10:00:48  阅读:152  来源: 互联网

标签:java 乘积 nums 复杂度 元素 力扣 238 result 数组


题目:

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

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

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

 示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
 

提示:

2 <= nums.length <= 105
-30 <= nums[i] <= 30
保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内
 

进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/product-of-array-except-self
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

一、

利用索引左侧的所有数字的乘积和右侧所有数字的乘积相乘。

1.初始化两个空数组 L 和 R。对于给定索引 i,L[i] 代表的是 i 左侧所有数字的乘积,R[i] 代表的是 i 右侧所有数字的乘积;

2.用两个循环来填充 L 和 R 数组的值。对于数组 L,第一个元素的左边没有元素。L[0] 初始化为 1,对于其他元素满足通式:L[i] = L[i-1] * nums[i-1]。
同理,对于数组 R,R[length-1] 应为 1。其他元素:R[i] = R[i+1] * nums[i+1];
3.当 R 和 L 数组填充完成,索引 i 处的结果值result为:L[i] * R[i]。

 代码:

二、

左右乘积--降低空间复杂度

1.初始化 result 数组,对于给定索引 i,result [i] 代表的是 i 左侧所有数字的乘积,相当于把 result 作为方法一的 L 数组;
2.这种方法没有构造 R 数组,是用一个遍历来跟踪右边元素的乘积,并更新数组 result [i] = result [i] * R ,然后 R 更新为 R=R*nums[i],其中变量 R 表示的就是索引右侧数字的乘积。

代码:

 

 

标签:java,乘积,nums,复杂度,元素,力扣,238,result,数组
来源: https://www.cnblogs.com/lmy569/p/16202278.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有