演算法學習之查詢1

2021-10-23 20:19:43 字數 3427 閱讀 9893

首先考慮的是基本的資料結構

第一類: 查詢有無–set

元素』a』是否存在,通常用set:集合

set只儲存鍵,而不需要對應其相應的值。

set中的鍵不允許重複

第二類: 查詢對應關係(鍵值對應)–dict

元素』a』出現了幾次:dict–>字典

dict中的鍵不允許重複

第三類: 改變對映關係–map

通過將原有序列的關係對映統一表示為其他

演算法應用-leetcode練習

leetcode349。兩個陣列的交集

class

solution

:def

intersection

(self, nums1: list[

int]

, nums2: list[

int])-

> list[

int]

:#第一種方法,直接法

list1 =

for i in nums1:

for j in nums2:

if i == j:

if i not

in list1:

return list1

#第二種方法,利用set的性質來做

set1 =

set(nums1)

set2 =

set(nums2)

return set1 & set2

leetcode350.兩個陣列的交集2

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:

nums1_dict[num]-=1

return res

leetcode242.字母的異位詞

class

solution

:def

isanagram

(self, s:

str, t:

str)

->

bool

:from collections import counter

dict_s = counter(s)

dict_t = counter(t)

''' for word in s:

if dict_s[word] != dict_t[word]:

return false

for word in t:

if dict_t[word] != dict_s[word]:

return false

return true

'''if dict_s == dict_t:

return

true

else

:return

false

leetcode202.快樂數

class

solution

:def

(self, n:

int)

->

bool

: n =

str(n)

visited =

set(

)while1:

n =str(

sum(

int(i)**2

for i in n)

)if n ==

'1':

return

true

if n in visited:

return

false

visited.add(n)

leetcode290.單詞規律

class

solution

:def

wordpattern

(self, pattern:

str,

str:

str)

->

bool

: str_list =

str.split(

" ")

iflist

(map

(str_list.index,str_list))!=

list

(map

(pattern.index,pattern)):

return

false

else

:return

true

leetcode205.同構字串

class

solution

:def

isisomorphic

(self, s:

str, t:

str)

->

bool

: s_map =

list

(map

(s.index,s)

) t_map =

list

(map

(t.index,t)

)if s_map != t_map:

return

false

else

:return

true

leetcode451.根據字元出現頻率排序

class

solution

:def

frequencysort

(self, s:

str)

->

str:

from collections import counter

s_dict = counter(s)

res =

'' s =

sorted

(s_dict.items(

),key =

lambda item:item[1]

, reverse =

true

)for key,value in s:

res += key * value

return res

演算法學習 之查詢

順序查詢 假設靜態查詢表的順序儲存結構為 typedef struct sstable int search seq sstable st,keytype key search seq 比較無監視哨的查詢演算法 int location sstable st elemtype e location ...

演算法學習之折半查詢

二分查詢又稱折半查詢 優點 比較次數少,查詢速度快,平均效能好 缺點 要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。折半查詢流程 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將...

演算法學習 1

插入排序是學習演算法時最先學到的乙個演算法,很簡單,也許看一遍就會理解,從而覺得自己掌握這個基本的演算法。但是很多人可能會像我一樣,過了一段時間,提筆來寫一下插入排序的偽 就很難寫出書本上如此優雅的偽 insertion sort a for j 2 to a.length key a j inse...