LeetCode組隊刷題 task03

2021-10-23 17:30:24 字數 4475 閱讀 9317

3.1 考慮的基本資料結構第一類:查詢有無–set元素』a』是否存在,通常用set:集合set只儲存鍵,而不需要對應其相應的值。set中的鍵不允許重複第二類:查詢對應關係(鍵值對應)–dict元素』a』出現了幾次:dict–>字典dict中的鍵不允許重複第三類:改變對映關係–map通過將原有序列的關係對映統一表示為其他

3.2 演算法應用

3.2.1 leetcode 349 intersection of two arrays

1題目描述給定兩個陣列nums,求兩個陣列的公共元素。如nums1 = [1,2,2,1],nums2 = [2,2]結果為[2]結果中每個元素只能出現一次出現的順序可以是任意的

分析實現由於每個元素只出現一次,因此不需要關注每個元素出現的次數,用set的資料結構就可以了。記錄元素的有和無。把nums1記錄為set,判斷nums2的元素是否在set中,是的話,就放在乙個公共的set中,最後公共的set就是我們要的結果。**如下:

def

intersection

(self, nums1: list[

int]

, nums2: list[

int])-

> list[

int]

: nums1 =

set(nums1)

return

set(

[i for i in nums2 if i in nums1]

)

也可以通過set的內建方法來實現,直接求set的交集:

class

solution

:def

intersection

(self, nums1: list[

int]

, nums2: list[

int])-

> list[

int]

: set1 =

set(nums1)

set2 =

set(nums2)

return set2 &

set

3.2.2 leetcode 350 intersection of two arrays 2

題目描述給定兩個陣列nums,求兩個陣列的交集。分析實現元素出現的次數有用,那麼對於儲存次數就是有意義的,所以選擇資料結構時,就應該選擇dict的結構,通過字典的比較來判斷;記錄每個元素的同時要記錄這個元素的頻次。記錄num1的字典,遍歷nums2,比較nums1的字典的nums的key是否大於零,從而進行判斷。

**如下:

class

solution

:def

intersect

(self, nums1: list[

int]

, nums2: list[

int])-

> list[

int]

:from collections import counter

nums1_dict = counter(nums1)

res =

for num in nums2:

if nums1_dict[num]

>0:

# 說明找到了乙個元素即在num1也在nums2

nums1_dict[num]-=1

return res

3.2.3 leetcode 242 intersection of two arrays 2

題目描述

給定兩個字串 s 和 t ,編寫乙個函式來判斷 t 是否是 s 的字母異位詞。分析實現判斷異位詞即判斷變換位置後的字串和原來是否相同,那麼不僅需要儲存元素,還需要記錄元素的個數。可以選擇dict的資料結構,將字串s和t都用dict儲存,而後直接比較兩個dict是否相同。

class

solution

:def

isanagram

(self, s:

str, t:

str)

->

bool

:from collections import counter

s = counter(s)

t = counter(t)

if s == t:

return

true

else

:return

false

class

solution

:def

(self, n:

int)

->

bool

: already =

set(

)while n !=1:

sum=

0while n >0:

# 取n的最後一位數

tmp = n %

10sum

+= tmp **

2# 將n的最後一位截掉

n //=

10# 如果求的和在過程**現過

ifsum

in already:

return

false

else

: already.add(

sum)

n =sumreturn

3.2.5 leetcode 290 word pattern

題目描述

給出乙個模式(pattern)以及乙個字串,判斷這個字串是否符合模式分析實現抓住變與不變,筆者開始的思路是選擇了dict的資料結構,比較count值和dict對應的keys的個數是否相同,但是這樣無法判斷順序的關係,如測試用例:『aba』,『cat cat dog』。那麼如何能既考慮順序,也考慮鍵值對應的關係呢?抓住變與不變,變的是鍵,但是不變的是各個字典中,對應的相同index下的值,如dict1[index] = dict2[index],那麼我們可以建立兩個新的字典,遍歷index對兩個新的字典賦值,並比較value。還有乙個思路比較巧妙,既然不同,那麼可以考慮怎麼讓它們相同,將原來的dict通過map對映為相同的key,再比較相同key的dict是否相同。

class

solution

:def

wordpattern

(self,pattern,

str)

:str

=str

.split(

)return

list

(map

(pattern.index,pattern))==

list

(map

(str

.index,

str)

)

3.2.6 leetcode 205 isomorphic strings

題目描述

給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。分析實現思路與上題一致,可以考慮通過建兩個dict,比較怎樣不同,也可以將不同轉化為相同。

class

solution

:def

isisomorphic

(self, s:

str, t:

str)

->

bool

:return

list

(map

(s.index,s))==

list

(map

(t.index,t)

)

3.2.7 leetcode 451 sort characters by frequency

題目描述

給定乙個字串,請將字串裡的字元按照出現的頻率降序排列。分析實現對於相同頻次的字母,順序任意,需要考慮大小寫,返回的是字串。使用字典統計頻率,對字典的value進行排序,最終根據key的字串乘上value次數,組合在一起輸出。

class

solution

:def

frequencysort

(self, s:

str)

->

str:

from collections import counter

s_dict = counter(s)

# sorted返回的是列表元組

s =sorted

(s_dict.items(

), key=

lambda item:item[1]

, reverse =

true

)# 因為返回的是字串

res =

''for key, value in s:

res += key * value

return res

Datawhale公益AI組隊學習Task3 5

一類是模型無法得到較低的訓練誤差,我們將這一現象稱作欠擬合 underfitting 另一類是模型的訓練誤差遠小於它在測試資料集上的誤差,我們稱該現象為過擬合 overfitting 在實踐中,我們要盡可能同時應對欠擬合和過擬合。雖然有很多因素可能導致這兩種擬合問題,在這裡我們重點討論兩個因素 模型...

開始刷題LeetCode

今天決定開始刷題,每天至少一題,如果題目確實沒有解決出來沒有關係,但是要保證每天至少接觸了一道新的題目!一定要堅持下去,現在是個菜鳥可能會感覺有點難度,堅持下去,總有一天會好的!今天是第一天,做的第乙個題目 reverse words in a string given an input strin...

leetcode刷題歷程

難度 簡單 題目 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 ...