leetcode 238 除自身以外陣列的乘積

2021-10-01 04:28:51 字數 1198 閱讀 3022

這個題目就是《劍指offer》上面的面試題66。剛開始就是按照上面的思路然後構造了兩個陣列pre和last,分別記錄從前往後的累乘積和從後往前的累乘積,然後再遍歷一次得到result,其中result[i] = pre[i-1] * last[i+1]。**如下:

public

static

int[

]productexceptself

(int

nums)

int[

] result =

newint

[numlength]

;//得到result陣列

for(

int i =

1; i < numlength-1;

++i)

//兩端的值單獨處理

result[0]

= last[1]

; result[numlength-1]

= pre[numlength-2]

;return result;

}

當然這樣做的時間複雜度是o(2n)(或者o(n)),空間複雜度為o(2n),result不算在裡面。題目說能否使得空間複雜度為常量,思考一番還是無果,於是看了其他人的實現,也是看了好一會才懂。先看一下**:

public

static

int[

]productexceptself1

(int

nums)

return result;

}

主要是看看後面那個for迴圈,這裡很巧妙只遍歷了一次就計算出了所有結果。我們將這個步驟分為兩步:

首先分別計算左邊的累乘結果和右邊的累乘結果,直到左右指標相遇時。

然後右邊的指標就可以直接利用左邊的累乘結果更新左邊的結果,左邊的指標也可以利用右邊的累乘結果更新右邊的結果。

上乙個圖就能看的比較清晰。要知道left和right的更新只和nums有關,而result的更新則只與left、right都有關,綠色的線表示這一步要進行的乘法操作。

leetcode 238 除自身以外陣列的乘積

給定長度為 n 的整數陣列 nums,其中 n 1,返回輸出陣列 output 其中 output i 等於 nums 中除 nums i 之外其餘各元素的乘積。示例 輸入 1,2,3,4 輸出 24,12,8,6 說明 請不要使用除法,且在 o n 時間複雜度內完成此題。高階 你可以在常數空間複雜...

leetcode238 除自身以外陣列的乘積

從左到右遍歷一趟,記錄每個位置左邊的乘積 首位為1 從右到左走一趟,將上一步的結果累乘每一位右邊的乘積 class solution object def productexceptself self,nums if not nums return output 1 len nums k 1 for...

LeetCode 238 除自身以外陣列的乘積

題目描述 給定長度為 n 的整數陣列 nums,其中 n 1,返回輸出陣列 output 其中 output i 等於 nums 中除 nums i 之外其餘各元素的乘積。示例 輸入 1,2,3,4 輸出 24,12,8,6 說明 請不要使用除法,且在 o n 時間複雜度內完成此題。高階 你可以在常...