训练营Day06 | 哈希表

71 阅读1分钟

哈希表

哈希映射

快速判断一个元素是否出现集合里

实现形式: 数组,字典,集合

242. 有效的字母异位词

为26个字母创建哈希数组

def isAnagram(self, s: str, t: str) -> bool:
    word_s = [0] * 26
    word_t = [0] * 26
    if len(s) != len(t):
        return False
    for i in range(len(s)):
        word_s[ord(s[i]) - ord("a")] += 1
        word_t[ord(t[i]) - ord("a")] += 1
    return word_s == word_t

更好的判断方式

def isAnagram(self, s: str, t: str) -> bool:
    word_s = [0] * 26
    if len(s) != len(t):
        return False
    for i in range(len(s)):
        word_s[ord(s[i]) - ord("a")] += 1
        word_s[ord(t[i]) - ord("a")] -= 1
    for i in range(26):
        if word_s[i] != 0:
            return False
    return True

349. 两个数组的交集

用set()的并集操作

list(set(nums1) & set(nums2))

字典构建哈希表

def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
    inter = {}
    res = []

    for n1 in nums1:
        inter[n1] = 1
    
    for n2 in nums2:
        if n2 in inter.keys() and inter[n2] == 1:
            res.append(n2)
            inter[n2] -= 1
    
    return res

202. 快乐数

存储循环过程中的结果

如果结果存在,说明陷入死循环

注意while的条件

def isHappy(self, n: int) -> bool:
    sum_set = {}

    while n:
        res = 0
        if n in sum_set.keys():
            return False
        else:
            i = n
            while i:
                res += (i % 10) ** 2
                i = i // 10
            if res == 1:
                return True
            sum_set[n] = res
            n = sum_set[n]

    if n == 1:
        return True
    else:
        return False

1. 两数之和

边遍历边用dict存储{value:下标}

用target-当前值 查询获取下标返回

def twoSum(self, nums: List[int], target: int) -> List[int]:

    n = len(nums)
    n_dict = {}

    for i in range(n):
        added = target - nums[i]
        if added in n_dict.keys():
            return [n_dict[added], i]
        n_dict[nums[i]] = i