1. 程式人生 > 其它 >leetcode238. 除自身以外陣列的乘積 (左右乘積)

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) 時間複雜度內完成此題。

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

思路

建立左累乘陣列 和 右累乘陣列 其中右累乘陣列可以簡化為一個值動態維護
左陣列維護上三角 右陣列維護下三角

程式碼

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n=nums.size();
        vector<int>ans(n);
        ans[0]=1;
        for(int i=1;i<n;++i)
        {
            ans[i]=ans[i-1]*nums[i-1];
        }
        int right=1;
        for(int i=n-2;i>=0;--i)
        {
            right=right*nums[i+1];
            ans[i]=right*ans[i];   
        }
        return ans;
    }
};