文章目录
一、题目
238. Product of Array Except Self
Given an integer array nums, return an array answer such that answeri is equal to the product of all the elements of nums except numsi.
The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs in O(n) time and without using the division operation.
Example 1:
Input: nums = 1,2,3,4
Output: 24,12,8,6
Example 2:
Input: nums = -1,1,0,-3,3
Output: 0,0,9,0,0
Constraints:
2 <= nums.length <= 105
-30 <= numsi <= 30
The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.
Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)
题目来源:leetcode
二、题解
由于题目中规定不能使用除法,因此使用left和right两个数组存储nums中索引为i的元素左侧和右侧所有元素的乘积。注意vector中的初始化方法。
cpp
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> left(n,0);
vector<int> right(n,0);
vector<int> res;
for(int i = 0;i < n;i++){
if(i == 0) left[i] = 1;
else left[i] = left[i-1] * nums[i-1];
}
for(int i = n - 1;i >= 0;i--){
if(i == n-1) right[i] = 1;
else right[i] = right[i+1] * nums[i+1];
}
for(int i = 0;i < n;i++){
res.push_back(left[i] * right[i]);
}
return res;
}
};