大家好!我是曾续缘😙
今天是《LeetCode 热题 100》系列
发车第 16 天
普通数组第 4 题
❤️点赞 👍 收藏 ⭐再看,养成习惯
给你一个整数数组
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)
的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)
解题方法
这道题使用前后缀乘积数组进行预处理后很容易解决.
为了节省空间,我们先使用ans
数组来表示前缀的乘积 (注意这里的前缀ans[i]
是不包括nums[i]
的), 第二次遍历时使用变量r
来表示后缀乘积.
Code
查看代码
java
class Solution {
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] ans = new int[n];
ans[0] = 1;
for(int i = 1; i < n; i++){
ans[i] = nums[i - 1] * ans[i - 1];
}
int r = 1;
for(int i = n - 1; i >= 0; i--){
ans[i] = ans[i] * r;
r *= nums[i];
}
return ans;
}
}