刷题Day(5) | 代码随想录

98 阅读2分钟

本系列文章是我刷代码随想录过程中的笔记。代码地址:leetcode

今天是我刷“代码随想录”的第五天

今日内容

  • 哈希表理论基础
  • 242.有效的字母异位词
    1. 两个数组的交集
    1. 快乐数
    1. 两数之和

哈希表理论基础

哈希表是根据关键码的值而直接进行访问的数据结构。简单理解的话,就是一个数组。我们可以根据数组的索引来获取数组的值。 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。

哈希函数

将元素转化成哈希表上的索引的函数

哈希碰撞

在计算索引的时候,难免会遇见两个元素的索引一致。此时就发生了哈希碰撞。解决方法有两个

  • 拉链法

    在已有元素后面以链表的的形式储存

  • 线性探测法

    在下面找一个空位存储

leetcode 242. 有效的字母异位词

这道题定义两个哈希表,分别存储s,t中的字符及其个数。最后比较两个哈希表是否相等。

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        dic_s = dict()
        dic_t = dict()
        for i in s:
            if i in dic_s:
                dic_s[i] += 1
            else:
                dic_s[i] = 1

        for i in t:
            if i in dic_t:
                dic_t[i] += 1
            else:
                dic_t[i] = 1

        return dic_s == dic_t

leetcode 349. 两个数组的交集

先记录出现的元素,并记录为1,然后从另一个数组中判断是否存在,如果存在就将其添加到结果中。

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        val_dict = {}
        ans = []
        for num in nums1:
            val_dict[num] = 1

        for num in nums2:
            if num in val_dict.keys() and val_dict[num] == 1:
                ans.append(num)
                val_dict[num] = 0

        return ans

leetcode 202. 快乐数

定义一个集合,记录每次计算的和。当和为1时,直接返回true。如果和在集合中出现过,说明进入了循环,直接返回false

class Solution:
    def isHappy(self, n: int) -> bool:
        s = set()

        while True:
            sum = self.sum(n)
            if sum in s:
                return False
            if sum == 1:
                return True
            n = sum
            s.add(n)

    def sum(self, n):
        s = 0
        while n:
            s += (n % 10) ** 2
            n //= 10
        return s

leetcode 1. 两数之和

定义一个哈希表记录当前位置和另一个数。如果另一个数在,返回两个下标即可。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d = dict()
        for i in range(len(nums)):
            if nums[i] not in d:
                d[target - nums[i]] = i
            else:
                return [i, d[nums[i]]]