Day 6| 242.有效的字母異位詞 、349. 兩個陣列的交集 、 202. 快樂數 、 1. 兩數之和

forrestr發表於2024-05-27

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

相關文章