Skip to content

349 Intersection of Two Arrays

这题直接看follow-up.

Approach 1 Trivial Hashset

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        set_1 = set(nums1)
        set_2 = set(nums2)

        res = set.intersection(set_1,set_2)
        return res

Facebook Follow-up

如果给你的俩array是sorted的,有没有什么O(n) time O(1) space的方法?(不计算output array的空间). 用双指针法, 流程图如下,

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        nums1.sort()
        nums2.sort()

        res = []

        p1,p2 = 0,0

        while p1 < len(nums1) and p2 < len(nums2):
            curr1,curr2 = nums1[p1],nums2[p2]
            # we find the intersecton, now advances both pointer until nums[x] is different from both nums1 and nums2
            if curr1 == curr2:
                res.append(curr1)
                while p1 < len(nums1) and curr1 == nums1[p1]:
                    p1 += 1
                while p2 < len(nums2) and curr2 == nums2[p2]:
                    p2 += 1
                continue

            if curr1 > curr2:
                # 由于是sorted, advance p2直到不同
                while p2 < len(nums2) and nums2[p2] == curr2:
                    p2 += 1
            else:
                # advance p1
                while p1 < len(nums1) and nums1[p1] == curr1:
                    p1 += 1
        return res