leetcode238除自身以外的乘積

題目鏈接:https://leetcode-cn.com/problems/product-of-array-except-self/

題目描述:

給你一個長度爲 n 的整數數組 nums,其中 n > 1,返回輸出數組 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。

 

示例:

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

 

提示:題目數據保證數組之中任意元素的全部前綴元素和後綴(甚至是整個數組)的乘積都在 32 位整數範圍內。

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

進階:
你可以在常數空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出數組不被視爲額外空間。)

題目分析:最簡單直接的思路就是直接計算總的乘積然後直接除以每個位置的數即可,前提是數組元素不能有0,但是題目要求不用除法,

因此需要轉換思路。我們可以先計算出來位置i左邊元素的乘積再累乘右邊元素的乘積,那麼就能得到我們想要的結果,就是把原來的乘法分成2步來做,結果數組保存的是前綴與後綴元素的累乘,注意初始值的處理,要把元素i排除掉,類比前綴和數組進行改造

代碼:

class Solution {
    public int[] productExceptSelf(int[] nums) {
          int[] res = new int[nums.length];
          res[0] = 1;
          //i位置左邊元素的乘積
          for(int i = 1;i < nums.length;i++){//1,2,3,4
               res[i] = res[i-1]*nums[i-1];
          }
          //i位置右邊元素的乘積再乘以左邊的c乘積
          int te = 1;
          for(int i = nums.length-1;i >= 0;i--){
              res[i] = res[i]*te;//乘以右邊元素
              te *= nums[i];//右邊的累乘
          }
          return res;
    }
}

今日份不開心,3號的每日一題拖到現在才寫,而且今天這個垃圾編輯器有毒,markdown文件寫不了,改成富文本了,用mac用習慣了,現在真的不習慣Windows了,好難用啊。。。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章