# 第67期-基础数据结构:哈希表 两个数组的交集
Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。
# 1 问题描述
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
示例 3:
输入: nums1 = [1,2], nums2 = [1,1]
输出: [1]
示例 4:
输入: nums1 = [1,3,8,9,3], nums2 = [1,0]
输出: [1]
初始代码
from typing import List
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
#在此之间填写代码
print(Solution().intersect([1,2,2,1],[2,2]))
print(Solution().intersect([4,9,5],[9,4,9,8,4]))
print(Solution().intersect([1,2],[1,1]))
print(Solution().intersect([1,3,8,9,3],[1,0]))
2
3
4
5
6
7
8
9
# 2 解题思路
- 标签:哈希表
- 将第一个数组中的每个数字都放进哈希表中,记录他们出现的次数
- 便利第二个数组中的元素,若出现在哈希表中,则放进结果列表中,并记录哈希表中出现次数减一
# 3 解题方法
from typing import List
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
a,b={},[]
for i in nums1:
a[i]=a.get(i,0)+1
for i in nums2:
if a.get(i,0)>0:
b.append(i)
a[i]=a.get(i)-1
return b
print(Solution().intersect([1,2,2,1],[2,2]))
print(Solution().intersect([4,9,5],[9,4,9,8,4]))
print(Solution().intersect([1,2],[1,1]))
print(Solution().intersect([1,3,8,9,3],[1,0]))
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第1-3,13-16行:
题目中已经给出的信息,运行代码时要根据这些代码进行编辑
第4行:
定义字典a用于存放数字中的数字以及其出现的次数,定义列表b用于存放重复元素
第5行:
使用for循环遍历第一个数组中的每一个数字
第6行:
若哈希表中有i,则获取i对应的值并加一,表示出现的次数多一次,若没有i,则赋值a[i]为0+1
第7行:
使用for循环遍历第二个数组中的每一个数字
第8行:
判断第二个数组中的数字在哈希表中是否存放且出现次数大于0
第9行:
若是,则将该元素存放于列表b中
第10行:
将哈希表中i对应的次数减一
第9行:
返回函数列表b
代码运行结果为: