【LeetCode 189】算法:除自身以外数组的乘积
题目:给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据保证数组 nums 之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
解决这个问题,简便方法是计算数组中每个元素的前缀乘积和后缀乘积,然后将它们相乘得到该元素最终的乘积,这样就不会计算该元素本身。
我们可以通过两个遍历(一个从左到右,一个从右到左)来实现这个目标,且不使用除法。
具体步骤:
1. 计算前缀乘积:从左到右遍历数组,计算每个元素的前缀乘积。
2. 计算后缀乘积:从右到左遍历数组,计算每个元素的后缀乘积,并与前缀乘积相乘得到最终结果。
我的 Java 代码:
public class Solution {
public int[] productExceptSelf(int[] nums) {
int n = nums.length;
int[] answer = new int[n];
// 计算前缀乘积
int prefixProduct = 1;
for (int i = 0; i < n; i++) {
answer[i] = prefixProduct;
prefixProduct *= nums[i];
}
// 计算后缀乘积,并与前缀乘积相乘
int suffixProduct = 1;
for (int i = n - 1; i >= 0; i--) {
answer[i] *= suffixProduct;
suffixProduct *= nums[i];
}
return answer;
}
}
对于输入 nums = [1, 2, 3, 4],程序的运行过程如下:
计算前缀乘积:answer = [1, 1, 2, 6]
计算后缀乘积,并与前缀乘积相乘:answer = [24, 12, 8, 6]
最终,answer 为 [24, 12, 8, 6]。
所有正文内容皆为本人原创,禁止搬运

浙公网安备 33010602011771号