題目
給你一個長度爲 n 的整數數組 nums,其中 n > 1,返回輸出數組 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。
請不要使用除法,且在 O(n) 時間複雜度內完成此題。
思路
由於不能使用除法,且要在O(n)時間複雜度內完成題目。
因此將每一個數組位置對應的乘積值轉化爲output[i]=i左側的所有數乘積*i右側的所有數乘積。
計算左側的乘積,可以讓數組從前向後循環,即可完成;但是一次循環無法同時完成左側和右側的統計,因此需要從後向前循環統計右側所有數的乘積。
代碼
class Solution {
public int[] productExceptSelf(int[] nums) {
if(nums==null||nums.length==0){return null;}
int[] output = new int[nums.length];
output[0]=1;
for(int i=1; i<nums.length; i++){
output[i]=output[i-1]*nums[i-1];
}
int R=1;
for(int i=nums.length-1;i>=0;i--){
output[i]=output[i]*R;
R=R*nums[i];
}
return output;
}
}
複雜度分析
- 時間複雜度:O(n)
- 空間複雜度:O(1)