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