提交**
總結給你乙個長度為 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 陣列...