哈希章节 leetcode 思路&实现

242. 有效的字母异位词

思路:看看哈希表是不是一样就可以,for循环遍历,把内容加到defaultdict里面

主要还是熟练度问题吧,字典平时写的比较少,取键取值再看看

python 复制代码
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        s_str = defaultdict(int)
        for i in s:
            s_str[i] += 1
        for j in t:
            s_str[j] -= 1
        for val in s_str.values():
            if val != 0:
                return False
        return True

349. 两个数组的交集

思路:相似,用defaultdict获取nums1中的所有值,如果nums2中的数在dic中,加到集合里,最后返回list形式的集合即可

python 复制代码
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        dic = defaultdict(int)
        res = set()
        for i in nums1:
            dic[i] += 1
        for j in nums2:
            if dic[j] != 0:
                res.add(j)
        return list(res)

202. 快乐数

没啥思路啊,看上去有点复杂,写个分解函数?还真是,确实简单,写个分解函数。吧n转化成一个个数字再平方和的sum_new,如果函数生成不是1,加入集合就一直循环,直到生成的数再给定的集合里

python 复制代码
class Solution:
    def isHappy(self, n: int) -> bool:
        ans = set()
        while self.getnew(n) != 1:
            if self.getnew(n) in ans:
                return False
            ans.add(self.getnew(n))
            n = self.getnew(n)
        return True
            

        
    def getnew(self, n):
        res = []
        sum_new = 0
        while n != 0:
            num = n%10
            n //= 10
            res.append(num)
        for i in res:
            sum_new += i**2
        return sum_new

1. 两数之和

思路:遍历一遍数组,同步的保存target-numsi,如果遇到相同的数即返回这个结果数组,注意,这里返回的是索引,应该是此刻遍历到的i,以及numsi对应的值

null 复制代码
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = defaultdict(int)
        res = []
        for i in range(len(nums)):
            if nums[i] in dic:
                res.append(i)
                res.append(dic[nums[i]])
                break
            else:
                dic[target-nums[i]] = i
        return res

454. 四数相加 II

思路:for循环遍历1,2数组的所有和,负值加入到字典里;再for循环遍历3,4数组的和,如果in字典,加上字典的值即可。

null 复制代码
class Solution:
    def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:
        dic = defaultdict(int)
        for i in nums1:
            for j in nums2:
                dic[-i-j] += 1
        count = 0
        for p in nums3:
            for q in nums4:
                if p+q in dic:
                    count += dic[p+q]
        return count

383. 赎金信

思路:遍历magazine中的所有字母,放到字典里,然后用ransomnote取用,如果取用时发现值为0,则返回false

python 复制代码
class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        dic = defaultdict(int)
        for i in magazine:
            dic[i] += 1
        for j in ransomNote:
            if dic[j] == 0:
                return False
            dic[j] -= 1
        return True

15. 三数之和

思路:题意也即该数组内所有的数不能重复使用,但是可以允许数字相同。考虑首先遍历数组,获取-(nums i+ nums j),并保存在字典里,值为【i,j】,如果nums k in字典,查k在不在【i,j】中,如果不在,append然后加到结果数组里面。

这个思路有问题:对于同一个-(nums i+ nums j),回复该前面的而数组,而且这里要加入的是三元组

采用思路:

1:去重:也即防止使用了相同位置的数

2:用-numsi-numsj来表示第三个数。因为第三个数肯定在j的遍历过程中,只需再所有的j中遍历即可,因为先判断再输出,这里不存在重合的情况,也即j不会和c选到同一个数。

null 复制代码
class Solution:
    def threeSum(self, nums: list[int]) -> list[list[int]]:

        nums.sort()
        res = set()
        for i in range(len(nums)-2):
            if i>0 and nums[i] == nums[i-1]:
                continue

            seen = set()
            for j in range(i+1, len(nums)):
                c = -nums[i]-nums[j]
                if c in seen:
                    res.add(tuple((nums[i],c,nums[j])))
                seen.add(nums[j])

        return [list(tup) for tup in res]
相关推荐
lucas_AI几秒前
Muse Glimmer 30B:Meta 难得给的真开源,强在哪、虚在哪
人工智能·算法
ai产品老杨4 分钟前
国产NPU视觉算法完整流程
算法
过期的秋刀鱼!7 分钟前
带替换的采样
人工智能·python·算法·决策树·机器学习
过期的秋刀鱼!25 分钟前
使用多个决策树
人工智能·算法·决策树·机器学习·数据挖掘
203号居民1 小时前
LeetCode hot 100 —560. 和为 K 的子数组
java·算法·leetcode
退休倒计时2 小时前
【每日一题】LeetCode 20. 有效的括号 TypeScript
算法·leetcode·职场和发展·typescript
文心快码BaiduComate2 小时前
光本位联合文心快码打造面向光电芯片研发的全栈AI Agent Lightmate
算法
一次旅行2 小时前
ViT/CLIP/LLaVA/GPT-4V/VideoLLM多模态架构全解:原理仿真+工业落地选型+完整推理代码
人工智能·算法·架构
神明不懂浪漫3 小时前
【第五章】队列
开发语言·数据结构·经验分享·笔记·算法
happy_baymax3 小时前
MATLAB MCP Server+ MATLAB Agentic Toolkit+Simulink Agentic Toolkit自动更新批处理文件.ps1
人工智能·算法