题目描述:给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
示例1:
输入: [1,2,3,4]
输出: [24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
算法思想:分别当前数的前缀乘积和后缀乘积,如:当要计算第i个位置的乘积结果时,只需要扫描并计算i前面的所有数的乘积和i后面的所有数的乘积(前后各扫描一边即可完成乘积的计算)。
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int len=nums.size();
vector<int> result(len,1);/*这里需要注意必须要声明vector的大小和初始值,否则会报空指针错误*/
int prefix=1;
for(int i=0;i<len;i++){
result[i]=prefix;
prefix=prefix*nums[i];
}
int surfix=1;
for(int i=len-1;i>=0;i--){
result[i]*=surfix;
surfix*=nums[i];
}
return result;
}
};
时间复杂度是O(n),空间复杂度是O(n)