代码随想录day06(哈希表)

代码随想录day06

1.242. 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:

输入: s = “rat”, t = “car”
输出: false

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

这道题虽然是哈希表的题目,但是用了数组坐标的方法很巧妙的解决了此问题,感谢老师提供的思路,如果在s数组中出现过的话,对应的位置加一,t则减一,这样,如果数组中有任意一位出现0的时候就说明不是有效的字母异位次。

2.349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        # 创建一个hash表
        hash_set = set()
        # 将第一个数组的数据放入hash表中
        for num in nums1:
            hash_set.add(num)
        
        # 创建结果数组
        res = []
        # 遍历第二个数组
        for num in nums2:
            # 如果当前数据在hash表中,说明是重复数据
            if num in hash_set:
                # 添加到结果数组中,并从hash表中删除该数据
                res.append(num)
                hash_set.remove(num)
        
        # 返回结果数组
        return res

3.202 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:

输入:n = 2
输出:false

class Solution:
    def isHappy(self, n: int) -> bool:
        hashmap = set()
        while n not in hashmap:
            hashmap.add(n)
            Sum = 0
            while n > 0:
                digit = n%10
                Sum += digit**2
                n = n // 10
            n = Sum
            if n == 1:
                return True
        return False

用chatgpt的解法求的,真好用啊这个软件

4.001 两数之和

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        # 创建字典存储每个数对应的下标
        num_dict = {}
        # 遍历数组
        for i, num in enumerate(nums):
            # 如果目标数字与当前数的差值在字典中,说明找到了答案
            if target - num in num_dict:
                return [num_dict[target - num], i]
            # 如果当前数不在字典中,将其加入字典
            num_dict[num] = i

忘记了遍历字典的方法了。。。很尴尬,都做了很多遍了,居然不能一下子想到答案,惭愧啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值