代码随想录第六天(哈希表) || 1有效的字母异位词 2两个数组的交集

有效的字母异位词

讲解:代码随想录

思路:

1.哈希表法:创建一个数组哈希表(因为字母只有26个,并且ascii码连续),把被比对的数组出现的字母,对应哈希表中的字母位置数值加一,把比对数组出现的字母,在哈希表中对应字母位置减一,最后如果哈希表中全为0,那就为有效的字母异位词   

代码:

def isAnagram(self, s: str, t: str) -> bool:
        record=[0]*26
        for i in s :
            record[ord(i)-ord("a")]+=1#ord求acill码
        for j in t:
            record[ord(j)-ord("a")]-=1
        for i in record:
            if i!=0:
                return False
        return True

遇到的问题:

1.求ascii码:使用ord()函数求ASCII码

两个数组的交集

讲解:代码随想录

思路:

1.哈希表:创建两个数组哈希表,分别记录两个数组里出现的数字次数,最后同时遍历两个数组哈希表,因为如果两个数组中都有某个数,那么两个数组哈希表中对应位置一定大于0,那么相乘肯定也大于0,反之如果有其中一个没有,相乘就会等于0,所以只需要判定两个数组哈希表当前位置是否大于0即可

代码:

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        record1=[0]*1001
        record2=[0]*1001
        for i in nums1:
            record1[i]+=1
        for j in nums2:
            record2[j]+=1
        result=[]
        for k in range(1001):
            if record1[k]*record2[k]>0:
                result.append(k)#不要把record里面的数当作结果,record是统计的次数
        return result

遇到的问题:

1.错把哈希表中的值,当作结果值,里面只是结果值的统计数

快乐数:

讲解:代码随想录

思路:

创建一个数组哈希表,如果n不在哈希表中,就将n放入哈希表中(此步是为了避免无限循环,因为后面,如果n对应的new_num值不为1,要赋值给n),利用转换字符串,for循环来将整数n每一位取出,再转换为int,判断是否满足,每一位的平方的和为1,如果不是就把和赋值给n,重复操作。

代码:

数组哈希

class Solution:
    def isHappy(self, n: int) -> bool:
        record=[]
        while n not in record:
            record.append(n)
            new_num = 0
            n_str = str(n)#转换字符串,使用for循环取出每一位
            for i in n_str:
                new_num += int(i)**2
            if new_num ==1:
                return True
            else:
                n = new_num
        return False

遇到的问题:

1.一开始没有理解快乐数的定义

2.没有想到可以把整形转化为字符串,用for循环取出每一项,再转化为int

两数之和

讲解:代码随想录

思路:

因为要同时记录值,及其对应的下标,所以需要使用map,与之契合的是python中的字典,所以使用字典当作哈希表

代码:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        record = dict()
        for index,value in enumerate(nums):
            if target-value in record:
                return [record[target-value],index]
            record[value] = index
        return []

遇到的问题:

1.对于字典的多种创建方式,调用dict(),直接{}

2.取出数组的值和下标:通过enumerate(),可以将可迭代的容器,返回下标和值

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值