题目:
350.两个数组的交集
思路:
hash map保存数组中的元素和个数信息。使用较短的数组进行哈希,这样查询时间会快一些。
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
if len(nums1) > len(nums2):
tmp = nums1
nums1 = nums2
nums2 = tmp
num_map1 = {}
for num in nums1:
num_map1[num] = num_map1.get(num, 0) + 1
res = []
for num in nums2:
if num_map1.get(num, 0) > 0:
res.append(num)
num_map1[num] -= 1
return res
时间复杂度是O(n)
方法二:排序之后逐个比较
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
res = []
nums1.sort()
nums2.sort()
i = 0
j = 0
while i < len(nums1) and j < len(nums2):
if nums1[i] < nums2[j]:
i += 1
elif nums1[i] == nums2[j]:
res.append(nums1[i])
i += 1
j += 1
else:
j += 1
return res
方法三:直接遍历一遍也可以
class Solution:
def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
ret = []
for num1 in nums1:
if num1 in nums2:
ret.append(num1)
nums2.remove(num1)
return ret