4月30天leetcode訓練 Day15

2021-10-05 03:55:45 字數 2421 閱讀 9888

給定乙個由n個整數組成的陣列,其中n> 1,則返回乙個陣列輸出,使得output [i]等於除nums [i]之外的所有nums元素的乘積。

example:

input: [1,2,3,4]

output: [24,12,8,6]

不考慮時間複雜度的話,通過遞迴暴力破解,設定遞迴輔助函式,傳入陣列和開始,結束位置。開始遍歷,當前元素對應的輸出為當前元素之前的元素乘積和之後的元素乘積,所以傳入輔助函式的開始和結束位置分別為(陣列開始,當前位置);(下乙個位置,陣列結束),如果開始節點和結束節點相同說明當前為第乙個元素或者為最後乙個元素,此時返回1.

class

solution

:def

productexceptself

(self, nums: list[

int])-

> list[

int]

: output =[0

]*len(nums)

for i in

range

(len

(nums)):

output[i]

= self.helper(nums,

0,i)

* self.helper(nums,i +1,

len(nums)

)return output

defhelper

(self,nums,start,end)

:if start >= end:

return

1 result =

1for i in

range

(start,end)

: result = result * nums[i]

return result

這種想法是在寫這篇部落格的時候想到的,直接先遍歷一遍獲得所有元素的乘積,然後再遍歷一遍,遇到的元素對應的輸出為陣列乘積除以當前元素。這樣時間複雜度為o(n).但是這道題目要求好像不能用除法。。。。所以**我也不寫了,只是提出一種這樣的思路。

通過兩個陣列分別儲存當前元素的前面元素乘積,和後面元素的乘積,然後兩個乘積即可。通過三次遍歷,前後前。

class

solution

:def

productexceptself

(self, nums: list[

int])-

> list[

int]

: left =[0

]*len(nums)

right =[0

]*len(nums)

left[0]

=1right[

len(nums)-1

]=1for i in

range(1

,len

(nums)):

left[i]

= nums[i-1]

* left[i -1]

print

(right)

for i in

range

(len

(nums)-2

,-1,

-1):

right[i]

= right[i +1]

* nums[i +1]

result =[0

]*len(nums)

for i in

range

(len

(nums)):

result[i]

= left[i]

*right[i]

return result

只用最後的result陣列表示輸出,先前序遍歷,儲存每個元素前面的元素乘積,然後再後續遍歷一次,設定乙個臨時變數表示從後面開始的乘積數。

class

solution

:def

productexceptself

(self, nums: list[

int])-

> list[

int]

: result,right =[1

]*len(nums),1

for i in

range(1

,len

(nums)):

result[i]

= nums[i-1]

* result[i -1]

for i in

range

(len

(nums)-1

,-1,

-1):

result[i]

= right * result[i]

right *= nums[i]

return result

4月30天leetcode訓練 Day16

給了乙個2維陣列,裡面是由1和0組成。規則是這樣的,1代表陸地,0代表海水,讓我們尋找小島,那小島肯定有乙個特點,被水隔離,連續的陸地組成一塊小島,而本題中連續的定義為上下左右相鄰 不包括對角線 基於這樣的規則讓我們找尋有幾個島。example 1 input 11110 11010 11000 0...

4月30天leetcode訓練 Day27

given a 2d binary matrix filled with 0 s and 1 s,find the largest square containing only 1 s and return its area.從乙個二維矩陣中找出最大的正方形面積 正方形裡面都是1才合法 input ...

4月30天leetcode訓練 Day6

given an array of strings,group anagrams together.給乙個由字串構成的陣列,讓我們把裡面字串由相同的字元組合起來的字串分成一組。input eat tea tan ate nat bat output ate eat tea nat tan bat n...