互联网行业的小白,写博客的目的是为了记录自己的学习过程、对自己学习中所犯的错误做一个总结。由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!
题目描述
题目传送门:两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
题解
注意:每个元素唯一,无顺序
暴力实现 |
AC代码
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
ans = set()
for i in nums1:
for j in nums2:
if j == i:
ans.add(j)
return list(ans)
时间复杂度: O ( n 2 ) O(n^2) O(n2)
对暴力的优化
将内层循环修改
AC代码
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
ans = set()
for i in nums1:
if i in nums2:
ans.add(i)
return list(ans)
时间复杂度近似于 O ( n ) O(n) O(n)吧
内置函数 |
python内置函数特性,&
运算符取交集
AC带代码
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
return list(set(nums1) & set(nums2))
哈希表 |
- 建立一个空的哈希表和一个空的列表,列表存放答案
- 哈希表的键存放
nums1
的数,值就设为1
了,当然也可以是其他的数 - 遍历
nums2
,如果nums2
的值出现在哈希表的键当中,那么把它放到答案的列表中,同时哈希表的值设为None - 返回
ans
即可
AC代码
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
dic = dict()
ans = []
for i in nums1:
if dic.get(i) is None:
dic[i] = 1
for i in nums2:
if dic.get(i) is not None:
ans.append(i)
dic[i] = None
return ans
时间复杂度 O ( n ) O(n) O(n)
码字不易,您的
支持
就是我坚持
下去的动力,一起加油哦。