算法与数据结构(除自身以外数组的乘积)
题目
思路
这个题要求除自身以外其他元素的乘积,我们可以将数组中的数分为两部分,一部分是它左边的数,另一部分是它右边的数。
先求每个数左边所有数的乘积,保存到answer数组中,再求右边数的乘积,每个与answer[i]相乘,answer数据即为最后的结果
解题过程
首先我们将answer[0]赋为1,因为索引为0的元素左边元素乘积为0,当前元素左边数的乘积是前一个元素值和前一个元素左边元素乘积相乘。
然后不断求右边的元素值,与answer[i]相乘,即可得到想要的结果。
代码
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
//用answer[i]代表左侧元素的乘积
int length = nums.size();
vector<int> answer(length);
answer[0]=1;
//索引为0的左侧没有元素,所以为1
for(int i=1;i<length;i++)
{
answer[i] = nums[i-1] * answer[i-1];
}
//用R代表右侧元素的乘积
int R=1;
for(int i=length-1;i>=0;i--)
{
answer[i] = answer[i]*R;
R *= nums[i];
}
return answer;
}
};