0349. 两个数组的交集

0349. 两个数组的交集 #

  • 标签:数组、哈希表
  • 难度:简单

题目大意 #

给定两个数组,编写一个函数来计算它们的交集。重复元素只计算一次。

解题思路 #

思路一:哈希表 #

先遍历第一个数组,利用哈希表来存放第一个数组的元素,对应字典值设为 1。

然后遍历第二个数组,如果哈希表中存在该元素,则将该元素加入到答案数组中,并且将该键值清空。

思路二:双指针 #

使用分离双指针求解,具体步骤如下:

  • 对数组 nums1nums2 先排序。
  • 使用两个指针 left_1left_2left_1 指向第一个数组的第一个元素,即:left_1 = 0left_2 指向第二个数组的第一个元素,即:left_2 = 0
  • 如果 nums1[left_1] 等于 nums2[left_2],则将其加入答案数组(注意去重),并将 left_1left_2 右移。
  • 如果 nums1[left_2] 小于 nums2[left_2],则将 left_1 右移。
  • 如果 nums1[left_2] 大于 nums2[left_2],则将 left_2 右移。
  • 最后输出答案数组。

代码 #

  • 思路一:哈希表
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        numDict = dict()
        nums = []
        for num in nums1:
            if num not in numDict:
                numDict[num] = 1
        for num in nums2:
            if num in numDict and numDict[num] != 0:
                numDict[num] -= 1
                nums.append(num)
        return nums
  • 思路二:双指针
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1.sort()
        nums2.sort()

        left_1 = 0
        left_2 = 0
        res = []
        while left_1 < len(nums1) and left_2 < len(nums2):
            if nums1[left_1] == nums2[left_2]:
                if nums1[left_1] not in res:
                    res.append(nums1[left_1])
                left_1 += 1
                left_2 += 1
            elif nums1[left_1] < nums2[left_2]:
                left_1 += 1
            elif nums1[left_1] > nums2[left_2]:
                left_2 += 1
        return res
本站总访问量  次  |  您是本站第  位访问者