【LEETCODE】238.除自身以外數組的乘積

題目

給你一個長度爲 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;
    }
}

複雜度分析

  1. 時間複雜度:O(n)
  2. 空間複雜度:O(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章