题目
    350.两个数组的交集

    思路
    hash map保存数组中的元素和个数信息。使用较短的数组进行哈希,这样查询时间会快一些。

    1. def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
    2. if len(nums1) > len(nums2):
    3. tmp = nums1
    4. nums1 = nums2
    5. nums2 = tmp
    6. num_map1 = {}
    7. for num in nums1:
    8. num_map1[num] = num_map1.get(num, 0) + 1
    9. res = []
    10. for num in nums2:
    11. if num_map1.get(num, 0) > 0:
    12. res.append(num)
    13. num_map1[num] -= 1
    14. return res

    时间复杂度是O(n)

    方法二:排序之后逐个比较

    1. def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
    2. res = []
    3. nums1.sort()
    4. nums2.sort()
    5. i = 0
    6. j = 0
    7. while i < len(nums1) and j < len(nums2):
    8. if nums1[i] < nums2[j]:
    9. i += 1
    10. elif nums1[i] == nums2[j]:
    11. res.append(nums1[i])
    12. i += 1
    13. j += 1
    14. else:
    15. j += 1
    16. return res

    方法三:直接遍历一遍也可以

    1. class Solution:
    2. def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
    3. ret = []
    4. for num1 in nums1:
    5. if num1 in nums2:
    6. ret.append(num1)
    7. nums2.remove(num1)
    8. return ret