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?
Yes
Example
For A = [1, 2, 3]
, return [6, 3, 2]
.
按照定义做,定义两个数组A,B,A[i]表示i位置后的数的乘积,B[i]表示i前的数的乘积,这样ans[i] = A[I] * B[i];
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;
}
};