成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Leetcode] Product of Array Except Self 自身以外的數(shù)組乘積

rockswang / 1266人閱讀

摘要:動態(tài)規(guī)劃復(fù)雜度時間空間思路分析出自身以外數(shù)組乘積的性質(zhì),它實際上是自己左邊左右數(shù)的乘積,乘上自己右邊所有數(shù)的乘積。所以我們可以用一個數(shù)組來表示第個數(shù)字前面數(shù)的乘積,這樣。同理,我們可以反向遍歷一遍生成另一個數(shù)組。

Product of Array Except Self

Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

Solve it without division and in O(n).

For example, given [1,2,3,4], return [24,12,8,6].

Follow up: Could you solve it with constant space complexity? (Note: The output array does not count as extra space for the purpose of space complexity analysis.)

動態(tài)規(guī)劃 復(fù)雜度

時間 O(N) 空間 O(N)

思路

分析出自身以外數(shù)組乘積的性質(zhì),它實際上是自己左邊左右數(shù)的乘積,乘上自己右邊所有數(shù)的乘積。所以我們可以用一個數(shù)組left[i]來表示第i個數(shù)字(nums[i])前面數(shù)的乘積,這樣left[i] = left[i-1] nums[i-1]。同理,我們可以反向遍歷一遍生成另一個數(shù)組right[i] = right[i + 1] nums[i+1]。得到這兩個數(shù)組后,我們再遍歷一遍,把每個位置的left[i]乘上right[i]就行了

雙向遍歷法 復(fù)雜度

時間 O(N) 空間 O(1)

思路

實際上,我們可以用結(jié)果數(shù)組自身來存儲left和right數(shù)組的信息。首先還是同樣的算出每個點左邊所有數(shù)的乘積,存入數(shù)組中。然而在反向算右邊所有數(shù)的乘積時,我們不再把它多帶帶存入一個數(shù)組,而是直接乘到之前的數(shù)組中,這樣乘完后結(jié)果就已經(jīng)出來了。另外,因為我們不再多帶帶開辟一個數(shù)組來存儲右邊所有數(shù),不能直接根據(jù)數(shù)組上一個來得知右邊所有數(shù)乘積,所以我們需要額外一個變量來記錄右邊所有數(shù)的乘積。這里為了清晰對稱,遍歷左邊的時候也加入了一個額外變量來記錄。

注意

因為第一位在第一輪從左向右乘的時候乘不到,結(jié)果數(shù)組中會得到0,所以要先將第一位置為1,即res[0] = 1,其他的不用初始化

因為涉及左右兩邊的數(shù),所有數(shù)組長度為1的時候就直接返回自身就行了

代碼
public class Solution {
    public int[] productExceptSelf(int[] nums) {
        if(nums.length <= 1){
            return nums;
        }
        int[] res = new int[nums.length];
        res[0] = 1;
        int left = 1, right = 1;
        // 計算每個點左邊的乘積
        for(int i = 1; i < nums.length; i++){
            left = left * nums[i - 1];
            res[i] = left;
        }
        // 計算每個點右邊的乘積
        for(int i = nums.length - 2; i >= 0; i--){
            right = right * nums[i + 1];
            res[i] = right * res[i];
        }
        return res;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64558.html

相關(guān)文章

  • LeetCode 238 Product of Array Except Self

    Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].Solve it without division and in O(n). For...

    henry14 評論0 收藏0
  • 【Python】LeetCode 238. Product of Array Except Self

    摘要:題目描述題目解析簡單來說就是對于數(shù)組中每一項,求其他項之積。算一遍全部元素的積再分別除以每一項要仔細考慮元素為零的情況。沒有零直接除下去。一個零零的位置對應(yīng)值為其他元素之積,其他位置為零。兩個以上的零全部都是零。 題目描述 Given an array of n integers where n > 1, nums, return an array output such that o...

    kaka 評論0 收藏0
  • [LeetCode] Product of Array Except Self

    Problem Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]. Solve it without division and in ...

    golden_hamster 評論0 收藏0
  • [LeetCode] 238. Product of Array Except Self

    Problem Given an array of n integers where n > 1, nums, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i]. Solve it without division and in ...

    Loong_T 評論0 收藏0
  • leetcode 628 Maximum Product of Three Numbers

    摘要:題目詳情輸入一個大小大于等于三的數(shù)組,給出其中任意三個數(shù)乘積中的最大乘積想法這道題最主要的是要考慮正負數(shù)的情況。如果全都是正數(shù)相乘比較大,就取三個最大值相乘即可。 題目詳情 Given an integer array, find three numbers whose product is maximum and output the maximum product.輸入一個大小大于...

    CoreDump 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<