两个数组的交 (lintcode:intersection-of-two-arrays) (lintcode:intersection-of-two-arrays-ii)

题一:

返回两个数组的交,结果中的每个元素必须是唯一的,答案可以以任意顺序给出。

def intersection(self, nums1, nums2):
        # write your code here
        nums1 = set(nums1)
        nums2 = set(nums2)
        nums = nums1 & nums2
        nums = list(nums)
        return nums




题二:

计算两个数组的交,每个元素出现次数得和在数组里一样,答案可以以任意顺序给出。

一个错误的方法:

def intersection(nums1, nums2):
    nums = [i for i in nums1 if i in nums2]
    return nums
  
  
nums1 = [1, 2, 2, 1]
nums2 = [2]
print intersection(nums1, nums2)

输出应该是 [2] ,但得到得却是 [2, 2]

网上经常出现这个,或思路类似的方法。


正确的方法:

def intersection(nums1, nums2):
    nums1, nums2 = sorted(nums1), sorted(nums2)
    p1 = p2 = 0
    nums = []
    while p1 < len(nums1) and p2 < len(nums2):
        if nums1[p1] < nums2[p2]:
            p1 += 1
        elif nums1[p1] > nums2[p2]:
            p2 += 1
        else:
            nums += nums1[p1],
            p1 += 1
            p2 += 1
    return nums

思路,排序,双指针。



lintcode 原题1
lintcode 原题2

正确方法的出处

20180202

你可能感兴趣的:(两个数组的交 (lintcode:intersection-of-two-arrays) (lintcode:intersection-of-two-arrays-ii))