LeetCode:349(Python)—— 两个数组的交集(简单)

两个数组的交集

概述:给定两个数组 nums1 nums2 ,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。

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

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

方法一:set 集合

思路:set 集合的特点是有序且不重复,找到长度更短列表,依次判断是否共同存在,并添加返回即可。

# set集合
# set集合的特点是有序且不重复,找到长度更短列表,
# 依次判断是否共同存在,并添加返回即可。
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)
        set2 = set(nums2)
        return self.set_intersection(set1, set2)
    def set_intersection(self, set1, set2):
        if len(set1) > len(set2):
            return self.set_intersection(set2, set1)
        return [i for i in set1 if i in set2]

方法二:set 集合(简化版)

思路:思路和上面一致,简化了递归思想,并用if大法对边界判断即可。

# set集合(简化版)
# 思路和上面一致,简化了递归思想,并用if大法对边界判断即可。
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set1 = set(nums1)
        set2 = set(nums2)
        if len(set1) < len(set2):
            return [i for i in set1 if i in set2]
        else:
            return [i for i in set2 if i in set1]

方法三:双指针

思路:先排序,然后对两个列表依次进行指针判断,并忽略重复值,循环结束即可。

# 双指针
# 先排序,然后对两个列表依次进行指针判断,并忽略重复值,循环结束即可。
class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1.sort()
        nums2.sort()
        length1, length2 = len(nums1), len(nums2)
        intersection = list()
        index1 = index2 = 0
        while index1 < length1 and index2 < length2:
            num1 = nums1[index1]
            num2 = nums2[index2]
            if num1 == num2:
                # 保证加入元素的唯一性
                if not intersection or num1 != intersection[-1]:
                    intersection.append(num1)
                index1 += 1
                index2 += 1
            elif num1 < num2:
                index1 += 1
            else:
                index2 += 1
        return intersection

总结

每日一题(hard):我可真five
每日一题(easy):就这?

你可能感兴趣的:(leetcode,算法,职场和发展,python,面试)