leedcode-两个数组的交集 II
自己写的:
from typing import List class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: # 如果 nums1 或 nums2 为空列表,则返回空列表 if not nums1 or not nums2: return [] mylist = list() # 创建一个空列表用于存放交集元素 hash_num1 = {} # 创建一个空字典用于存放 nums1 中元素的出现次数 hash_num2 = {} # 创建一个空字典用于存放 nums2 中元素的出现次数 # 统计 nums1 中每个元素的出现次数 for i in nums1: if not hash_num1.get(i): # 如果 i 不在 hash_num1 中 hash_num1[i] = 1 # 则将 i 加入 hash_num1,并设置出现次数为 1 elif i in hash_num1: # 如果 i 已经在 hash_num1 中 hash_num1[i] += 1 # 则将 i 的出现次数加 1 # 统计 nums2 中每个元素的出现次数 for i in nums2: if not hash_num2.get(i): # 如果 i 不在 hash_num2 中 hash_num2[i] = 1 # 则将 i 加入 hash_num2,并设置出现次数为 1 elif i in hash_num2: # 如果 i 已经在 hash_num2 中 hash_num2[i] += 1 # 则将 i 的出现次数加 1 # 找到两个字典中共同的键 common_keys = set(hash_num1.keys()) & set(hash_num2.keys()) # 遍历共同的键,将其添加到结果列表中 for i in common_keys: temp = 0 # 用于记录共同键的出现次数 # 如果共同键在 nums1 和 nums2 中出现的次数不同,则取较小值 if hash_num1.get(i) >= hash_num2.get(i): temp = hash_num2.get(i) else: temp = hash_num1.get(i) # 将共同键按照出现次数添加到结果列表中 for j in range(temp): mylist.append(i) return mylist # 返回结果列表
gpt优化过的版本:
from typing import List class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: # 如果 nums1 或 nums2 为空列表,则返回空列表 if not nums1 or not nums2: return [] mylist = [] # 创建一个空列表用于存放交集元素 hash_num1 = {} # 创建一个空字典用于存放 nums1 中元素的出现次数 # 统计 nums1 中每个元素的出现次数 for i in nums1: hash_num1[i] = hash_num1.get(i, 0) + 1 # 遍历 nums2,查找是否存在于 nums1 中出现过的元素 for i in nums2: # 如果当前元素在 hash_num1 中存在且出现次数大于 0 if i in hash_num1 and hash_num1[i] > 0: mylist.append(i) # 添加到结果列表中 hash_num1[i] -= 1 # 更新出现次数 return mylist
双指针法:
class Solution: def intersect(self, nums1: [int], nums2: [int]) -> [int]: nums1.sort() # 对 nums1 排序,方便后续比较 nums2.sort() # 对 nums2 排序,方便后续比较 result = [] # 创建一个空列表用于存放交集元素 ptr1, ptr2 = 0, 0 # 分别表示 nums1 和 nums2 的索引 # 当 nums1 和 nums2 都还有元素未比较时 while ptr1 < len(nums1) and ptr2 < len(nums2): if nums1[ptr1] < nums2[ptr2]: # 如果 nums1 中当前元素小于 nums2 中当前元素 ptr1 += 1 # 移动 nums1 的指针 elif nums1[ptr1] == nums2[ptr2]: # 如果两个元素相等 result.append(nums1[ptr1]) # 将该元素添加到结果列表中 ptr1 += 1 # 同时移动两个列表的指针 ptr2 += 1 else: # 如果 nums1 中当前元素大于 nums2 中当前元素 ptr2 += 1 # 移动 nums2 的指针 return result # 返回交集结果列表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)