Given an integers array A.
Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B WITHOUT divide operation.
Have you met this question in a real interview?For A = [1, 2,
3]
, return [6, 3, 2]
.
class Solution {
public:
/**
* @param A: Given an integers array A
* @return: A long long array B and B[i]= A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1]
*/
//分段的思路,用兩個數組B[i],表示i之前的數的乘積, A[i]表示i之後的數的乘積
vector<long long> productExcludeItself(vector<int> &nums) {
// write your code here
int len = nums.size();
vector<long long> ans;
if(len < 1)
return ans;
long long *A = new long long[len + 5];
long long *B = new long long[len + 5];
for(int i = 0; i < len + 5; ++i)
{
A[i] = 1;
B[i] = 1;
}
for(int i = 1; i < len; ++i)
{
B[i] = nums[i - 1] * B[i - 1];
}
for(int i = len - 2; i >= 0; --i)
{
A[i] = A[i + 1] * nums[i + 1];
}
for(int i = 0; i < len; ++i)
{
ans.push_back(A[i] * B[i]);
}
return ans;
}
};