題目回顧
給定長度爲 n 的整數數組 nums,其中 n > 1,返回輸出數組 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。
示例:
輸入: [1,2,3,4]
輸出: [24,12,8,6]
說明: 請不要使用除法,且在 O(n) 時間複雜度內完成此題。
進階:
你可以在常數空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出數組不被視爲額外空間。)
題解
參考題解
時間複雜度: ,
空間複雜度,
執行用時:
乘積 = 當前數左邊的乘積 * 當前數右邊的乘積
開闢一個n的新數組res,
一個循環,累積相乘,得到每個res[i],類似n!,
第二次循環從尾部開始累積相乘,並乘以對應位置的新數組res[i]
公式可能有誤
cpp
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
if(nums.size()<=1){
return nums;
}
vector<int> vec;
int k=1;
//左乘累積
for(int i=0;i<nums.size();i++){
vec.push_back(k);
k*=nums[i];
}
k=1;
//右乘累積並乘以上一輪左乘後的結果
for(int i=nums.size()-1;i>=0;i--){
vec[i]*=k;
k*=nums[i];
}
return vec;
}
};
int main(){
Solution sol=Solution();
vector<int> vec={1,2,3,4};
// expect result is [24 12 8 6]
vector<int> vec2=sol.productExceptSelf(vec);
for(int i=0;i<vec2.size();i++){
cout<<vec2[i]<<" ";
}
return 0;
}