代码随想录算法训练营第六天

48 阅读1分钟

哈希表的作用:快速判断某个元素是否在集合里

242.有效的字母异位词

新生成一个列表用来存储26个字母。遍历t,将t含有的字母数量存起来,然后再遍历一遍s,让列表减去s含有的字母,看列表里面是否全部位置都是0;如果是,那么s和t就是有效的字母异位词

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

349.两个数组的交集

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        dic={}
        for num in nums1:
            dic[num]=dic.get(num,0)+1
        
        res=set()
        for num in nums2:
            if num in dic:
                res.add(num)
                del dic[num]
        return list(res)

202.快乐数

这道题可以使用set这个数据结构,利用非快乐数无限循环的特性。如果某个数字在set中又一次出现,说明这不是个快乐数。

class Solution:
    def isHappy(self, n: int) -> bool:
        record=set()
        while n not in record:
            record.add(n)
            get_sum=0
            str_n=str(n)
            for i in str_n:
                get_sum+=int(i)**2
            if get_sum==1:
                return True
            else:
                n=get_sum
        return False

1.两数之和

使用dict()数据结构可以降低时间复杂度

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        records=dict()

        for index,value in enumerate(nums):
            if target-value in records:
                return [index,records[target-value]]
            records[value]=index
        return 0