leetcode_349 两个数组的交集

65 阅读1分钟

要求

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

说明:

输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。

核心代码

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))

另一解法

# 超时
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1,nums2 = sorted(nums1),sorted(nums2)
        res = set()
        for item in nums1:
            if self.exist(nums2,item):
                res.add(item)
        return list(res)
    
    def exist(self,nums,i):
        left = 0
        right = len(nums) - 1
        while left <= right:
            mid = (right + left) // 2
            if nums[mid] > i:
                right = mid - 1
            elif nums[mid] < i:
                left  = mid - 1
            else:
                return True
        return False

image.png

解题思路:第一种解法:我们将两个数组转化成set,然后取一下交集,最后结果输出成list即可;第二种解法:我们使用二分查找的方式看nums1中元素是不是存在在,存在最后放到输出中,但是这个会超时。