1. 程式人生 > >LeetCode238. 除自身以外陣列的乘積c++

LeetCode238. 除自身以外陣列的乘積c++

給定長度為 n 的整數陣列 nums,其中 n > 1,返回輸出陣列 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。

示例:

輸入: [1,2,3,4]
輸出: [24,12,8,6]

說明: 不要使用除法,且在 O(n) 時間複雜度內完成此題。

就是新建兩個陣列,前一個數組pre第i位存原陣列i位之前所有數的乘積複雜度n;第二個after存第i位之後的乘積,複雜度n,最後遍歷陣列,計算陣列pre[i]*after[i]就是ans[i]。三個迴圈並列,複雜度O(N).

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
    int s=1;
	int rs=1;
	int n=nums.size();
	vector<int>pre(n);
	vector<int>after(n);
        vector<int>output(n);
	for(int i=1;i<=n-1;i++)
	{
		rs=rs*nums[n-i];
		after[n-i-1]=rs;
		s=s*nums[i-1];
		pre[i]=s;
	}
	after[n-1]=1;
	pre[0]=1;
	for(int i=0;i<=n-1;i++)
	{
		output[i]=pre[i]*after[i];
	}
	return output;
}
};