LeetCode python-349. 两个数组的交集
先看题目:
(题目来力扣网站)
思路1:
第一种方法:遍历数组nums1,对比nums2,是否有相同的元素,取出即可。
class Solution:
def intersection(self, nums1, nums2):
arr = []
for i in range(len(nums1)):
for j in range(len(nums2)):
if nums1[i] == nums2[j] and nums1[i] not in arr:
arr.append(nums1[i])
return arr
p = Solution()
nums1 = [1,2,2,1]
nums2 = [2,2,1]
res = p.intersection(nums1, nums2)
print(res)
时间复杂度:O(m*n)
#此方法雷同于上面的方法,只是直接取数组中的数而不是索引。
class Solution:
def intersection(self, nums1, nums2):
arr = []
for i in nums1:
if i in nums2 and i not in arr:
arr.append(i)
return arr
p = Solution()
nums1 = [1,2,2,1]
nums2 = [2,2,1]
res = p.intersection(nums1, nums2)
print(res)
对比可知,内存上没有变化,但是时间上有所提高。
收获
①注意题目要求输出的结果中的元素是唯一的,故一定要加上判断条件nums1[i] not in arr 或者i not in arr。
思路2:
第二种方法:内置函数,将数组转化为集合,求集合的交集即可。
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
set1 = set(nums1)
set2 = set(nums2)
return list(set1 &set2)
p = Solution()
nums1 = [1,2,2,1]
nums2 = [2,2,1]
res = p.intersection(nums1, nums2)
print(res)
对比可知,内存上依旧没有改善,时间上对比前面两种更快。
时间复杂度是O(m+n),最坏情况下是O(m*n)。
字符串模式匹配——KMP算法(时间复杂度为O(m+n))
收获
①
学会用内置函数的方法求交集。将数组转换为集合,速度更快。