242.有效的字母異位詞
建議: 這道題目,大家可以感受到 陣列 用來做雜湊表 給我們帶來的遍歷之處。
題目連結/文章講解/影片講解: https://programmercarl.com/0242.有效的字母異位詞.html
思考
很簡單的一道題,需要記住python獲取ascii值的函式時ord()
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
s_dict = [0] * 26
t_dict = [0] * 26
for c in s:
s_dict[ord(c)-ord('a')]+=1
for c in t:
t_dict[ord(c)-ord('a')]+=1
for i ,j in zip(s_dict,t_dict):
if i!=j:
return False
return True
349. 兩個陣列的交集
建議:本題就開始考慮 什麼時候用set 什麼時候用陣列,本題其實是使用set的好題,但是後來力扣改了題目描述和 測試用例,新增了 0 <= nums1[i], nums2[i] <= 1000 條件,所以使用陣列也可以了,不過建議大家忽略這個條件。 嘗試去使用set。
題目連結/文章講解/影片講解:https://programmercarl.com/0349.兩個陣列的交集.html
思考
很簡單的題目,但是要記住set的一些用法。
#增
set.add(elmnt)
#刪
set.discard(value)
#差集(返回在set1中,但不在set2的元素)
set1.difference(set2)
#或者
set1-set2
#交集
set1 & set2
#或者
set1.intersection(set2)
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
202. 快樂數
建議:這道題目也是set的應用,其實和上一題差不多,就是 套在快樂數一個殼子
題目連結/文章講解:https://programmercarl.com/0202.快樂數.html
思考
不快樂的數,會陷入死迴圈,死迴圈的表現就是會重複出現已經出現過的數。
def mysum(n):
res = 0
while n:
res+= (n%10)**2
n = int(n / 10)
return res
class Solution:
def isHappy(self, n: int) -> bool:
res_set = set()
res_set.add(n)
while True:
n = mysum(n)
if n == 1 :
return True
if n in res_set:
return False
else:
res_set.add(n)
1. 兩數之和
建議:本題雖然是 力扣第一題,但是還是挺難的,也是 程式碼隨想錄中 陣列,set之後,使用map解決雜湊問題的第一題。
建議大家先看影片講解,然後嘗試自己寫程式碼,在看文章講解,加深印象。
題目連結/文章講解/影片講解:https://programmercarl.com/0001.兩數之和.html
思考
兩數之和,用雜湊來把遍歷過的元素存起來,查詢時複雜度O(1)。不然需要再用一個for迴圈,雜湊相當於少了一層for迴圈的計算量。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_dict = {}
for i in range(len(nums)):
if (target -nums[i]) in num_dict and i != num_dict[target -nums[i]]:
return [i,num_dict[target -nums[i]]]
else:
num_dict[nums[i]] = i