Leetcode238. Product of Array Except Self
题目
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].
Solve it without division and in O(n).For example, given [1,2,3,4], return [24,12,8,6].
Follow up:
Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)
解题分析
这道题,如果没有O(n)和不能使用除法这两个限制,最直接的想法就是先计算整个数组的元素的积,最后只需再除以每个对应的元素即可。然而题目要求我们不能使用除法,所以那就只能另辟蹊径了。
说起来这个算法还是挺巧妙的。我们来看看应该怎样考虑这个问题。由于要求每个元素对应的除了它本身的所有元素的积,所以我们不妨将这个问题分成两个子问题来看,即将所有在该元素左边位置的元素相乘,将右边位置的元素相乘,二者相乘的结果就是我每个元素对应的值。
想到了这一点,问题就稍微清晰了些。我们可以用两次循环,第一次循环计算每个元素对应的在它左边的元素的相乘的结果;第二次循环计算每个元素对应的在它右边的元素相乘的结果。注意每次循环要将上一次计算的结果进行迭代,这样问题就顺利解决啦。下面附上这个算法的源代码。
源代码
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int size = nums.size(), right = 1;
vector<int> v(size);
v[0] = 1;
for (int i = 1; i < size; i++) {
v[i] = v[i - 1] * nums[i - 1];
}
for (int i = size - 1; i >= 0; i--) {
v[i] *= right;
right *= nums[i];
}
return v;
}
};
以上是我对这道问题的一些想法,有问题还请在评论区讨论留言~