首先考慮的是基本的資料結構
第一類: 查詢有無–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...