除自身以外陣列的乘積

2021-10-17 05:30:16 字數 1713 閱讀 7205

提交**

總結給你乙個長度為 n 的整數陣列 nums,其中 n > 1,返回輸出陣列 output ,其中 output[i] 等於 nums 中除 nums[i] 之外其餘各元素的乘積。

示例:

輸入: [1,2,3,4]

輸出: [24,12,8,6]

說明: 請不要使用除法,且在 o(n) 時間複雜度內完成此題。高階:你可以在常數空間複雜度內完成這個題目嗎?( 出於對空間複雜度分析的目的,輸出陣列不被視為額外空間。)

將陣列按順序遍歷,最外層遍歷表示除自身以外的元素的情況,內層迴圈中,將除自身以外的陣列分成兩部分,一部分在該元素前,另一部分在該元素之後,分別遍歷,都將結果儲存在結果列表對應位置上。

不符合題目要求,時間複雜度大於o(n)

為降低時間複雜度,將兩層迴圈拆開,第乙個迴圈代表元素 i 左邊的陣列乘積之和,第二個迴圈代表元素 i 右邊的陣列乘積之和。

注:由於不包含自身,在左右迴圈開始的第乙個位置的乘積為 1 ,即以 1 代表元素本身,不影響除自身以外的陣列的乘積。

class

solution

:def

productexceptself

(self, nums: list[

int])-

> list[

int]

: output =[1

]*len(nums)

for i in

range

(len

(nums)):

for j in

range

(i+1

,len

(nums)):

output[i]

*= nums[j]

for k in

range(0

,i):

output[i]

*= nums[k]

return output

超出時間限制

class

solution

:def

productexceptself

(self, nums: list[

int])-

> list[

int]

: output =[1

]*(len

(nums)

)for i in

range(1

,len

(nums)):

output[i]

= output[i -1]

*nums[i -1]

r =1for j in

reversed

(range

(len

(nums)))

: output[j]

*= r

r *= nums[j]

return output

逆序範圍 reversed(range())在遍歷時方便很多;

題目說明不用除法增加了難度,主要的解決思路是遍歷。

除自身以外陣列的乘積

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

除自身以外陣列的乘積

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

除自身以外陣列的乘積

leetcode 238 左右列表 public int productexceptself int nums for int i nums.length 2 i 0 i for int i 0 i return res 空間為o 1 由於輸出陣列不算在空間複雜度內,那麼我們可以將 l 或 r 陣列...